BlockWrite I / O错误1784

时间:2012-07-02 04:48:01

标签: delphi

由于以下代码中的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;

2 个答案:

答案 0 :(得分:3)

假设pTBUFFER是指向TBUFFER的指针,ipBufBlock在哪里初始化?如果不是,ipBufBlock可能指向任何东西 - 甚至是无法读取的内存,因此不会写入文件。

答案 1 :(得分:1)

其他人也有类似的错误,因此这也适用于您的情况:

WriteFile returning error 1784

- Arjan