BlockWrite I/O错误1784 [英] BlockWrite I/O Error 1784
本文介绍了BlockWrite I/O错误1784的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
由于以下代码中的块写入,我收到 I/O错误1784 会覆盖文件3次.
I get an I/O Error 1784 due to blockwrite in the following code which overwrites 3 times a file.
我认为I/O错误1784表示ERROR_INVALID_USER_BUFFER.
I presume I/O Error 1784 means ERROR_INVALID_USER_BUFFER.
我不知道为什么.该错误有时会出现,而不是在每次运行时都出现...
I don't know why. The error appears sometimes, not at each run...
您能帮我吗?
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;
推荐答案
假定pTBUFFER是指向TBUFFER的指针,那么ipBufBlock在哪里初始化?如果不是,ipBufBlock可能指向任何内容-甚至是无法读取并因此无法写入文件的内存.
Assuming pTBUFFER is a pointer to TBUFFER, where is ipBufBlock initialized? If it isn't, ipBufBlock may point to anything - even memory that cannot be read and thus not be written to the file.
这篇关于BlockWrite I/O错误1784的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文