-1

次のコードのブロック書き込みが原因で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;
4

2 に答える 2

3

pTBUFFERがTBUFFERへのポインタであると仮定すると、ipBufBlockはどこで初期化されますか?そうでない場合、ipBufBlockは何かを指している可能性があります。読み取りができず、ファイルに書き込めないメモリも指します。

于 2012-07-02T06:32:29.613 に答える
1

他の誰かが同様のエラーを起こしたので、これはあなたのケースにも当てはまるかもしれません:

WriteFileがエラー1784を返す

-アルジャン

于 2012-07-02T06:58:20.140 に答える