大文本文件读写与内存映射(0)

  • 主题发起人 主题发起人 密码空间
  • 开始时间 开始时间

密码空间

Unregistered / Unconfirmed
GUEST, unregistred user!
最近,在分析,文本文件读写的问题: 1、开始用 assignfile reset rewrite readln writeln 来读写操作文件,一切还算顺利但遇到的问题是:文件一旦超过4G,自然报错,这个原因,不用去说了,32位支持的问题,于是就想到内存映射 2、都说内存映射处理大文件比较好,好的原因就是快,所以处理大文件尤其适合,于是攺用内存映射进行读写,但发现一个问题,内存映射是一次性分配空间的,问题又有二: a:如果一次性先分配空间,在预先未知空间大小的前提下,空间当然要大些,于是,当你写完数据,很可能就多出很多,多余空间,这些空间如何去除呢?查了很多资料,多是含糊其辞,没有一个实际的有用的方案 b:如果是一次性分配4G以上的空间,内存映射是与内存挂勾的,你有这么大的内存条吗?于是,创建和映射文件时,用4G的空间就报错了,这个问题,也不知如何解决,查了众多资料一无所获 3、再说文件写好了,用内存映射文件读文件,大文件的读,上面说了,不可能一次性映射到内存,那么,就需分段映射,都说可以分段映射,看了很多书籍和网上查了一下,都只有说的,根本找不到一个合理的方案 最近研究这些问题,伤痛了脑筋,不知哪位高人愿出来指教一二,非常感谢,在此,再次诚意叩谢!
 
CreateFile ReadFile WriteFile SetFilePointer CloseHandle
 
老兄,好像不支持4G以上的文件吧
 
我在家里的机子上,公司的工作机子上,公司的服务器上,都成功对对1G文件,2G文件,4G文件,5G文件进行内存映射,不管是分段的,还是一次全部映射到内存。本人对上面说法负责,如有不信,请付一万现金,我用QQ远程协助给你演示,哈哈1、file类型,是有一些32位限制。但filestream没问题。fatXX是有32位限制,但ntfs没问题。2、我不认为内存映射处理大文件快。映射是可以分段的,你查的很多资料,估计你的很多,都是自己想象的,所有MSDN/SDK文档都有说明。a本来就不适合使用内存映射文件。b不需要这么大的内存条,我256M物理内存,也一样可以映射1G。有地址空间限制,跟你多大条没关系。3,又说到你的书籍与网上,我建议,将书扔了,然后好好向白河愁地质灾害学习怎么使用百度与谷歌。
 
CnPack组件包的CnCRC32.pas中有处理大于4G的文件的示例代码。最新的SVN上有:如何获得代码请参考:http://www.cnpack.org/showdetail.php?id=639&lang=zh-cn此单元位置:cnvcl/Source/Common/CnCRC32.pas
 
多谢各位了,东兰梦舞 朋友,能发些分段映射的代码看看吗,在这里先谢过了!
 
得出这个结论,这里问问题,问也白问!
 
后退
顶部