由于以下代码中的blockwrite,我得到 I / O错误1784 它会覆盖3次文件。
我认为I / O错误1784表示ERROR_INVALID_USER_BUFFER。
我不知道为什么。有时出现错误,而不是每次运行......
你能帮助我吗?
procedure overwrite_files_3_times(iPath : string);
var
numwritten : integer;
iFileSize, iPosition : int64;
InFile : File of byte;
ipBufBlock : pTBUFFER;
k : integer;
begin
if not FileExists(iPath) then
exit;
FileMode := fmOpenRead or fmOpenWrite or fmShareDenyNone;
AssignFile(InFile, iPath);
Reset(InFile);
iFileSize := getfilesize2(iPath); // retrieve the filesize
iPosition := 0;
// 3 overwrites
for k:= 0 to 3-1 do
begin
Seek(InFile, 0);
iPosition := 0;
///////////////////
// on écrit
while iPosition + sizeOf(TBuffer) < iFileSize do
begin
BlockWrite(InFile,ipBufBlock^,sizeOf(TBuffer),numwritten);
iPosition := iPosition + sizeOf(TBuffer);
end;
// the end
if iPosition <= iFileSize -1 then
begin
BlockWrite(InFile,ipBufBlock^,iFileSize-iPosition,numwritten); //-->> generate I/O Error 1784
end;
end;
////////////////
CloseFile(InFile);
end;
答案 0 :(得分:3)
假设pTBUFFER是指向TBUFFER的指针,ipBufBlock在哪里初始化?如果不是,ipBufBlock可能指向任何东西 - 甚至是无法读取的内存,因此不会写入文件。
答案 1 :(得分:1)