对文件的操作? 现在在一个100G的视频文件尾加了10个字节标志。现在想删除这10个字节,如何快速实现。最好时间不要超过10秒谢谢各位! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用apiSetFileValidData这个试试看? SetFileValidData 会造成数据丢失 试试 with TFileStream.Create('你的文件',fmOpenReadWrite) do begin Size:=Size-10; Free; end; 用 流(FileStream、MemoryStream)不行,文件太大了(100G)...除了 按字节来复制 或 读写端口 之类的笨办法(还不一定能行得通),暂无 Idea... fileopenseek filereadseekfilewrite?? 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; 直接设置FileStream的Size和楼上的效果一样, 因为SetSize方法的实现在windows平台就是调用了SetEndOfFile呵呵 先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.这是据我所知最快的。你可以试试。 SetFilePointer + SetEndOfFile 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; 也可以看看python的file truncate 散分+疑惑求解 高手帮改改delphi的des算法 DBGRIDEH网格编辑DATETIME字段时,点下拉框按钮修改"YYYY-MM-DD HH:NN:SS"格式日期就出错??急,在线 一个关于磁盘路径得问题 在网页中运行的OCX,怎么获得自身的版本号? 如何把一个 长度为64的字符串‘010110001...’,转换为Int64类型?在线等,谢谢。 屏幕保护的思路如何实现!! 请问DEC()INC()的作用~ 从中英文混排的字符串中去掉字符时,该如何进行 API中关于加密码的函数有谁会用? 如何编写组件安装工程?有知道的请进来 delphi中在类的private中加过程出错?
SetFileValidData
这个试试看?
with TFileStream.Create('你的文件',fmOpenReadWrite) do
begin
Size:=Size-10;
Free;
end;
seek
fileread
seek
filewrite??
var
F: TFileStream;
begin
F := TFileStream.Create('D:\100GTest.dat', fmOpenReadWrite or fmShareDenyNone);
F.Seek(-10, soFromEnd);
SetEndOfFile(F.Handle);
F.Free;
end;
呵呵
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.这是据我所知最快的。你可以试试。
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;