大文件文件与内存映射的问题(100)

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

密码空间

Unregistered / Unconfirmed
GUEST, unregistred user!
首先声明,我分不多,但也请高手们耐心看完,非常感谢! 最近,在分析,文本文件读写的问题: 1、开始用 assignfile reset rewrite readln writeln 来读写操作文件,一切还算顺利但遇到的问题是:文件一旦超过4G,自然报错,这个原因,不用去说了,32位支持的问题,于是就想到内存映射 2、都说内存映射处理大文件比较好,好的原因就是快,所以处理大文件尤其适合,于是攺用内存映射进行读写,但发现一个问题,内存映射是一次性分配空间的,问题又有二: a:如果一次性先分配空间,在预先未知空间大小的前提下,空间当然要大些,于是,当你写完数据,很可能就多出很多,多余空间,这些空间如何去除呢?查了很多资料,多是含糊其辞,没有一个实际的有用的方案 b:如果是一次性分配4G以上的空间,内存映射是与内存挂勾的,你有这么大的内存条吗?于是,创建和映射文件时,用4G的空间就报错了,这个问题,也不知如何解决,查了众多资料一无所获 3、再说文件写好了,用内存映射文件读文件,大文件的读,上面说了,不可能一次性映射到内存,那么,就需分段映射,都说可以分段映射,看了很多书籍和网上查了一下,都只有说的,根本找不到一个合理的方案 最近研究这些问题,伤痛了脑筋,不知哪位高人愿出来指教一二,非常感谢,在此,再次诚意叩谢!
 
哈哈,都没人回答,我自己顶一下
 
估计玩过内存映射的朋友都应该遇到过上面的问题,怎么没人答呢???
 
这贴有分,在这里回吧.1 4G 是FAT32 的问题,NTFS无此问题,跟32位毫无关系.2 影射不了这么多空间3 还是用 FileSteam Seek 吧.
 
分段映射嘛
 
lqcros这位朋友,就是不知道如何分段映射,具体代码该如何?谢谢
 
白河愁 这位兄弟好,filestream 可以处理4G以上的大文件?FAT32 这个我知道,正是因为这样才考虑内存映射
 
3 还是用 FileSteam Seek 吧. [:D]
 
我在家里的机子上,公司的工作机子上,公司的服务器上,都成功对对1G文件,2G文件,4G文件,5G文件进行内存映射,不管是分段的,还是一次全部映射到内存。本人对上面说法负责,如有不信,请付一万现金,我用QQ远程协助给你演示,哈哈1、file类型,是有一些32位限制。但filestream没问题。fatXX是有32位限制,但ntfs没问题。2、我不认为内存映射处理大文件快。映射是可以分段的,你查的很多资料,估计你的很多,都是自己想象的,所有MSDN/SDK文档都有说明。a本来就不适合使用内存映射文件。b不需要这么大的内存条,我256M物理内存,也一样可以映射1G。有地址空间限制,跟你多大条没关系。3,又说到你的书籍与网上,我建议,将书扔了,然后好好向白河愁地质灾害学习怎么使用百度与谷歌。
 
多人接受答案了。
 
顶部