现在在一个100G的视频文件尾加了10个字节标志。现在想删除这10个字节,如何快速实现。最好时间不要超过10秒
谢谢各位!

解决方案 »

  1.   

    用api
    SetFileValidData
    这个试试看?
      

  2.   

    SetFileValidData 会造成数据丢失
      

  3.   

    试试
      with TFileStream.Create('你的文件',fmOpenReadWrite) do
      begin
        Size:=Size-10;
        Free;
      end;
      

  4.   

    用 流(FileStream、MemoryStream)不行,文件太大了(100G)...除了 按字节来复制 或 读写端口 之类的笨办法(还不一定能行得通),暂无 Idea...
      

  5.   

    fileopen
    seek 
    fileread
    seek
    filewrite??
      

  6.   

    procedure TForm1.Button2Click(Sender: TObject);
    var
      F: TFileStream;
    begin
      F := TFileStream.Create('D:\100GTest.dat', fmOpenReadWrite or fmShareDenyNone);
      F.Seek(-10, soFromEnd);
      SetEndOfFile(F.Handle);
      F.Free;
    end;
      

  7.   

    直接设置FileStream的Size和楼上的效果一样, 因为SetSize方法的实现在windows平台就是调用了SetEndOfFile
    呵呵
      

  8.   

    先CreateFileMapping,然后:
    LPVOID MapViewOfFile(
      HANDLE hFileMappingObject,   // handle to file-mapping object
      DWORD dwDesiredAccess,       // access mode
      DWORD dwFileOffsetHigh,      // high-order DWORD of offset
      DWORD dwFileOffsetLow,       // low-order DWORD of offset
      SIZE_T dwNumberOfBytesToMap  // number of bytes to map
    );设置dwFileOffsetLow为 文件大小-10, dwNumberOfBytesToMap设置为10.这是据我所知最快的。你可以试试。
      

  9.   

    SetFilePointer + SetEndOfFile
      

  10.   

    var
      FS: THandle;
    begin
      FS  :=  CreateFile(PChar(FileName),
                         GENERIC_ALL,
                         FILE_SHARE_READ ,
                         NIL,
                         OPEN_EXISTING,
                         FILE_ATTRIBUTE_NORMAL,
                         0
                         );
      if(FS = INVALID_HANDLE_VALUE) then begin
        ShowMessage('打开文件失败');
        Exit;//打开文件失败
      end;
      try
        SetFilePointer(FS, -10, NIL, FILE_END);//移到末尾倒数第10个字节
        if SetEndOfFile(FS) then ShowMessage('成功')
        else ShowMessage('失败');
      finally
        CloseHandle(FS);
      end;
    end; 
      

  11.   

    也可以看看python的file truncate