procedure ........ var FileStream: TFileStream; st:TStringStream; begin FileStream := TFileStream.Create(filepath,fmOpenRead); FileStream.Position:=0; st := tstringstream.create(''); st.CopyFrom(FileStream,FileStream.Size); end;
随手写个,你看看吧type pabc=^tabc; tabc=record i:integer; s:string[100]; end;var lists:tlist; //添加 procedure add(r:tabc); var p:pabc; begin new(p); p^:=r; lists.Add(p); end; //保存 procedure save(); var i:integer; begin with tfilestream.Create('1.dat',fmOpenWrite) do begin for i:=0 to lists.Count-1 do write((lists[i])^,sizeof(tabc)); free; end; end; //装入 procedure load(); var p:pabc; t:tabc; begin with tfilestream.Create('1.dat',fmOpenRead) do begin while read(t,sizeof(t))=sizeof(t) do begin new(p); p^:=t; end; free; end; end;
我现在用二进制读取
assignfile(f1, opendialog1.filename);
reset(f1,1);
setlength(strsongname,1);
blockread(f1, strsongname,sizeof(strsongname),bytesread);
读不出来.请教什么问题?
用TFileStream读二进制文件,可以按照字节来读
文件第1字节无效,第二字节开始是有效数据
每个字节是一个数据点,数据值=字节*625/256
我对流不是很熟悉
谢谢 cll007(gazo)
文件第1字节无效,第二字节开始是有效数据
每个字节是一个数据点,数据值=字节*625/256
我对流不是很熟悉
谢谢 cll007(gazo)
FileStream:TFileStream;
StringList:TStringList;
Buffer,aResult:string;
begin
FileStream:=TFileStream.Create('F:\1.txt',fmOpenRead);
StringList:=TStringList.Create;
try
FileStream.Position:=0;
//可以一次读多个字节
FileStream.Read(buffer,1);//将第一个字节读到buffer中
{
处理第一个字节
} //将第二个字节读到buffer中
FileStream.Position:=0+1;
FileStream.Read(buffer,2); // 处理第二个字节 ,用循环可连续处理多个字节
aResult:=FloatToStr(strtofloat(buffer)*625/256);
StringList.Add(aResult); finally
StringList.Free;
FileStream.Free;
end;
var
FileStream: TFileStream;
st:TStringStream;
begin
FileStream := TFileStream.Create(filepath,fmOpenRead);
FileStream.Position:=0;
st := tstringstream.create('');
st.CopyFrom(FileStream,FileStream.Size);
end;
pabc=^tabc;
tabc=record
i:integer;
s:string[100];
end;var
lists:tlist;
//添加
procedure add(r:tabc);
var
p:pabc;
begin
new(p);
p^:=r;
lists.Add(p);
end;
//保存
procedure save();
var
i:integer;
begin
with tfilestream.Create('1.dat',fmOpenWrite) do
begin
for i:=0 to lists.Count-1 do
write((lists[i])^,sizeof(tabc));
free;
end;
end;
//装入
procedure load();
var
p:pabc;
t:tabc;
begin
with tfilestream.Create('1.dat',fmOpenRead) do
begin
while read(t,sizeof(t))=sizeof(t) do
begin
new(p);
p^:=t;
end;
free;
end;
end;
应该是FileStream.Read(buffer,sizeof(byte));//一个字节长度
或者FileStream.Read(buffer,8);//一个字节长度