利用流向文件头部追加数据 我发现如果定位到文件最开始后写数据,会将源文件的内容覆盖。请问如何在保持源文件内容完整的前提下向其开始处追加数据(考虑到源文件很大,将源文件追加到数据末尾需要花费很长时间,我不想这样)?谢谢~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 写到文件头上回节省时间么?可能是我孤陋寡闻了,哈我向一个250M大小的文件写1M数据,耗时基本上在15ms到31ms,这个应该不怎么影响性能吧? FStream := TFileStream.Create('A.dat', fmOpenReadWrite); try FStream.Seek(0, soEnd); FStream.Write(FTick, SizeOf(Cardinal)); FStream.Write(Temp, SizeOf(TBudded)); //TBudded里面有1M数据 finally FStream.Free; end;写10M数据基本在130ms左右, 我的意思是:假如有A(500MB),B(1KB)两个文件,我想要它们合并成一个文件,并且让B在前面,A紧随其后。有什么办法(考虑的时间问题,我只能做到让A在前面,B紧随其后)? 参考budded的代码,注意seek的用法。 budded的不也是seek到了尾部吗? 是的,那段代码的作用就是向A文件追加数据,速度应该不慢。另外,操作大文件可以采用内核对象,比如CreateFileMapping,MapViewOfFile等函数,速度超快! ...(考虑到源文件很大,将源文件追加到数据末尾需要花费很长时间,我不想这样)... ------- 这个观点是不对的,对于向文件追加数据来说,“追加到末尾”是所有方式中效率最高的一种, 因为不需要“搬动”任何已有的数据。------- 如果要把一个200MB的文件追加到末尾总得需要半分钟吧。我的目的只是将几KB的数据加到大文件的头部。不知道有没有不用“搬动”数据的方法? 如果要把一个200MB的文件追加到末尾总得需要半分钟吧。我的目的只是将几KB的数据加到大文件的头部。不知道有没有不用“搬动”数据的方法?===============================================往文件头插入数据而不用“搬动”数据的高效办法是不存在。文件的数据类型本质是"流",与线性表类似。在文件尾添加或删除数据是最容易的,是不用“搬动”数据。而在文件中或文件头插入或删除数据都将"搬动"插入或删除位置处之后的全部或部分数据。 找几个控件 一个老问题,c/s系统上传文件到服务器。 请教大家,这个怎么搞!! 文件操作 急需 ★★★★●●■■用delphi的朋友们, 留下QQ!?◇◎●☆★★ 一个关于数据类型的问题? 一个本人认为比较有难度的问题 关于做好几个数据库接口的问题! 简单的语句,找不出的错误 大家帮忙看看我做的这个编号自动增加的小程序错误在哪?? 帮忙看看下面的代码错误在哪?
我向一个250M大小的文件写1M数据,耗时基本上在15ms到31ms,这个应该不怎么影响性能吧?
try
FStream.Seek(0, soEnd);
FStream.Write(FTick, SizeOf(Cardinal));
FStream.Write(Temp, SizeOf(TBudded)); //TBudded里面有1M数据
finally
FStream.Free;
end;
写10M数据基本在130ms左右,
假如有A(500MB),B(1KB)两个文件,我想要它们合并成一个文件,并且让B在前面,A紧随其后。有什么办法(考虑的时间问题,我只能做到让A在前面,B紧随其后)?
------- 这个观点是不对的,对于向文件追加数据来说,“追加到末尾”是所有方式中效率最高的一种,
因为不需要“搬动”任何已有的数据。-------
如果要把一个200MB的文件追加到末尾总得需要半分钟吧。我的目的只是将几KB的数据加到大文件的头部。不知道有没有不用“搬动”数据的方法?