读取2进制文件(0分)

  • 主题发起人 主题发起人 cmen
  • 开始时间 开始时间
C

cmen

Unregistered / Unconfirmed
GUEST, unregistred user!
我是新手,现有一个问题请教:
要从一个二进制文件读取内容(该二进制文件内容中包含有#0的字符),并赋值给一个变量,再经过运算后与另一个字符串进行比较。现在是怎么才可以读取二进制文件的内容而不被#0字符影响
 
用FileStream
f:=FileStream.Create(文件路径);
 
编译时提示:
Undeclared identifier: 'FileStream'
Missing operator or semicolon
 
TFileStream
 
能给出详细代码吗?
 
var
S: TFileStream;
Buf: array[0..1023] of Char;
begin
S := TFileStream.Create(FileName, fmOpenRead);
S.Read(Buf, 1024);
S.Free;
end
 
var
S: TFileStream;
Buf: array[0..1023] of Char;
cc: string;
nn: integer;
begin
S := TFileStream.Create(FileName, fmOpenRead);
S.Read(Buf, 1024);
S.Free;
cc:=Buf;
nn:=length(cc);
end

nn返回的并不是1024,而是只到#0字符的地方
 
Buf本来就不是string, 为什么要cc:=Buf呢?
 
那么,我怎样把读出来的内容进行必要的运算后与另一个字符串进行比较?
 
var
MS: TMemoryStream;
begin
MS := TMemoryStream.Create;
try
MS.LoadFromFile(FileName);
//do something with MS
finally
MS.Free;
end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var iFileHandle, FileSize:integer;
Buf:string;
begin
iFileHandle := FileOpen('c:/1.gif', fmOpenRead);
if iFileHandle = -1 then
ShowMessage('Open Error')
else begin
FileSize := FileSeek(iFileHandle, 0, 2);
FileSeek(iFileHandle, 0, 0);
SetLength(Buf, FileSize);
FileRead(iFileHandle, Buf[1], FileSize)
//[1]必需有
FileClose(iFileHandle);
end;
end;

与另一个字符串比较
if Buf = str then
 
接受答案了.
 

Similar threads

后退
顶部