Z
zfh
Unregistered / Unconfirmed
GUEST, unregistred user!
最近写了一个专门进行十六进制文件查找替换的小程序,是用TMemoryStream实现的,不过在完善
功能的时候遇到了点问题,不知如何解决。
; ; 1、文件内容的查找和替换用TStream流实现了,可是我还想在修改文件后恢复原来的文件修改
日期,这个功能通常我们用FileSetDate函数来做,但这势必要求文件用FileOpen再打开一次,
不知道在流中能不能直接搞定?
; ; 2、如果不用流而是用FileOpen或Reset来打开文件的话,则要有一个足够大的缓冲区(buf)来读入文件内容,
这个缓冲区用固定大小的数组显然不合适,尝试用动态数组写了以下代码,但即使打开一个小文件也会非法操作,
不知错在哪里?
; ; var
; ; ; ;F: File of byte;
; ; ; ;Buf:array of byte; ; ; //这里如果不用动态数组就没事
; ; ; ;ReadBytes: integer;
; ; begin
; ; ; AssignFile(F,'bbb.bin');
; ; ; Reset(F);
; ; ; SetLength(Buf,filesize(F));
; ; ; try
; ; ; ; BlockRead(F,Buf,sizeof(buf),readbytes);
; ; ; finally
; ; ; ; CloseFile(F);
; ; ; end;
; ;end;
功能的时候遇到了点问题,不知如何解决。
; ; 1、文件内容的查找和替换用TStream流实现了,可是我还想在修改文件后恢复原来的文件修改
日期,这个功能通常我们用FileSetDate函数来做,但这势必要求文件用FileOpen再打开一次,
不知道在流中能不能直接搞定?
; ; 2、如果不用流而是用FileOpen或Reset来打开文件的话,则要有一个足够大的缓冲区(buf)来读入文件内容,
这个缓冲区用固定大小的数组显然不合适,尝试用动态数组写了以下代码,但即使打开一个小文件也会非法操作,
不知错在哪里?
; ; var
; ; ; ;F: File of byte;
; ; ; ;Buf:array of byte; ; ; //这里如果不用动态数组就没事
; ; ; ;ReadBytes: integer;
; ; begin
; ; ; AssignFile(F,'bbb.bin');
; ; ; Reset(F);
; ; ; SetLength(Buf,filesize(F));
; ; ; try
; ; ; ; BlockRead(F,Buf,sizeof(buf),readbytes);
; ; ; finally
; ; ; ; CloseFile(F);
; ; ; end;
; ;end;