procedure TForm1.Button6Click(Sender: TObject);
var
f1: file;
Buf: array[0..127] of Char; //定义缓冲区
begin
AssignFile(f1, fn3);
try
Reset(f1, 1);
BlockRead(f1, Buf, SizeOf(Buf)); //读源文件
ShowMessage(Buf);
finally
CloseFile(f1);
end;
end;为什么读出的二进制文件总是空呢?
var
f1: file;
Buf: array[0..127] of Char; //定义缓冲区
begin
AssignFile(f1, fn3);
try
Reset(f1, 1);
BlockRead(f1, Buf, SizeOf(Buf)); //读源文件
ShowMessage(Buf);
finally
CloseFile(f1);
end;
end;为什么读出的二进制文件总是空呢?
fn3 已正确赋值
buf大小远小于文件大小
这些基本的都没问题
MS: TMemoryStream;
s: string;
begin
//读任意文件到字符串中
MS := TMemoryStream.Create();
MS.LoadFromFile(fileName);使用MemoryStream打开时也出错:cannot open file?
Open strName For Binary As #1
put #1, , 'abcdefg'
Close #1
使用delphi应该怎样读取?
for i := 0 to 127 do
Edit1.Text := Edit1.Text + Buf[i];
这样是能得出正确的字符串strpas(buf) 不行
move 也不行
SetLength(s, Length(Buf));
Move(Buf, s[1], Length(Buf));还有简单高效的方法没?
f1:file;
f3:string;
buf:array[0..127] of Char;
begin
f3:='123.txt';
AssignFile(f1,f3);
Reset(f1,1);
BlockRead(f1,buf,Sizeof(buf));
ShowMessage(buf);
CloseFile(f1);
end;直接就出来buf的字符。
其实你想按字节来读,可使用TFileStreamvar
MyStream:TFileStream;
f3:string;
buf:array[0..127] of Char;
begin
f3:='123.txt';
MyStream:=TFileStream.Create(f3,fmOpenRead);
MyStream.Read(buf,sizeof(buf));
ShowMessage(buf);
MyStream.Free;
end;
Edit1.Text := Edit1.Text + Buf[i]; for i := 0 to 127 do
S:= S + Buf[i]; //零长度空字符
BlockRead(fl,buf,Sizeof(buf),numread);
procedure TForm1.Button1Click(Sender: TObject);
var
fl:file;
f3:string;
buf:array[0..127] of char;
numread: Integer;
begin
if(OpenDialog1.Execute) then
begin
f3:=OpenDialog1.FileName;
end;
AssignFile(fl,f3);
Reset(fl,1);
FillChar(buf,SizeOf(buf),0);
BlockRead(fl,buf,Sizeof(buf),numread); ShowMessage();
CloseFile(fl);
end;
建议LZ先换一个纯文本文件来读一读试试,你最初的代码用来读文本文件是没问题的。
你的文件可能是UNicode的,这样ShowMessage是不可能正确读出的
现在想用delphi写出一个相同格式的文件来
试验了很久,总是有些错位哪个位高手能帮帮我?留下email,我可以把文件发过来
另送200分