卷起千堆雪tyn :你给出的方法行不通!(我想一次读出256个字节来,怎么办?) (50分)

T

txyx

Unregistered / Unconfirmed
GUEST, unregistred user!
我找到了出错的原因了,readln在遇到回车符就停下来了,可是我想一次读出256个字节来,还能用readln吗?
我的程序:
if opendialog1.execute
then
begin
AssignFile(f,opendialog1.FileName);
Reset(f);
size:=filesize(f);
Readln(f,s);

for i:=1 to length(s) do
begin
Appendstr(tem,InttoHex(ord(s),2)+#20);
if i mod 4 = 0 then AppendStr(tem,' ');
if i mod 16=0 then AppendStr(tem,#13#10);
if i mod 256=0 then AppendStr(tem,#13#10);
end;
richedit1.Lines.Text :=tem;
closeFile(f);
 
完全可以一次读出超过255的字节。

Type

TLine = Array [0..1024] of Char;
PLine = ^TLine;

Var

pBuf: PLine;

...

New( pBuf );

...

ReadLn( F, pBuf^ );

向文本文件后追加一行

var

filevar: textfile;

buf:string;

begin
assignfile(filevar,'txt.log');
append(filevar);
writeln(filevar,buf);
closefile(filevar);
end;
 
我是这样定义f:file of byte;
编译到readln(f,pbuf^);出错为:
[Error] a.pas(56): Incompatible types: 'Byte' and 'TLine'
 
用blockread行不行
 
不知道,没有试过
 
是不是f的定义有问题?
 
var f:file;
buf:array[1..256] of byte;
nr:integer;
begin

assignfile(f,'xxxx');
reset(f,1);
blockread(f,buf,sizeof(buf),nr);
if nr=256 then showmessage('256字节');
closefile(f);
end;
 
白河愁所提供的方法中,nr的功能不明
blockread(f,buf,sizeof(buf),nr);一句编译时报错。
 
多看看Delphi的帮助.
var
FromF, ToF: file;
NumRead, NumWritten: Integer;
Buf: array[1..2048] of Char;
begin
if OpenDialog1.Execute then { Display Open dialog box }
begin
AssignFile(FromF, OpenDialog1.FileName);
Reset(FromF, 1); { Record size = 1 }
if SaveDialog1.Execute then { Display Save dialog box}
begin
AssignFile(ToF, SaveDialog1.FileName); { Open output file }

Rewrite(ToF, 1); { Record size = 1 }
Canvas.TextOut(10, 10, 'Copying ' + IntToStr(FileSize(FromF))
+ ' bytes...');
repeat
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
BlockWrite(ToF, Buf, NumRead, NumWritten);
until (NumRead = 0) or (NumWritten <> NumRead);
CloseFile(FromF);
CloseFile(ToF);
end;
end;
end;
 
多人接受答案了。
 
nr 其实就是下文的NUMREAD,判断读出了多少个字节
 
顶部