大于4G的文件,如何进行操作?读、写、seek等!

 所属目录:Java   |   类型:技术问答   |   时间:2007-05-21
 问题:

如题。

· 网友精彩回答:

发表者:gauss

读写和正常的没有什么区别,一次不要读写超过4g的缓冲区就可以了.  
   
  mfc的cfile已经可以支持64位的seek,position,下面这些操作都是ulonglong的.  
   
  getlength  
  seek  
  seektobegin  
  seektoend  
  setlength    
 

发表者:scarlette

同时支持windows/linux你就不要想了,两个平台api完全不一样的。  
   
  windows端的话看看msdn就知道了,createfile()、setfilepointer()、readfile()、  
  writefile()、closehandle()。关键是setfilepointer()的第三个参数,plong   lpdistancetomovehigh,只能在nt   4以上核心才有用,9x是玩不了的,详细描述看msdn。读写还是readfile()、writefile(),没有区别。  
   
  linux端open()、lseek64()、read()、write()、close()。lseek64()只有kernel   2.4.18以后才支持,以前只有lseek()。具体描述你man一下好了。

发表者:scarlette

忘了提醒你了,不光需要kernel   2.4.18,glibc的版本也要匹配。

发表者:cx0928

对大文件操作也可以使用:   内存映射creatfilemapping

发表者:scarlette

楼上的:  
  createfilemapping还要自己按页粒度map/unmapviewoffile,不自找麻烦吗?

发表者:scarlette

顺便说一下,楼主,好结帖了!已经给你最底层最标准的方法了,还想怎么样啊?  
   
  另外,不小心看到了楼主的另一个帖子,实在觉得ooxx得很……windows对文件的基本操作也就这六个,还没听说过哪个os可以提供一个“那么基本的操作”将文件中间删掉一段的……

发表者:cx0928

麻烦不麻烦,自己看一下使用后的效果就知道了。  
  使用内存映射文件,对大文件的读取来说,性能比一般的文件操作api函数要好一百倍。

发表者:scarlette

楼主~~~i服了u了~~~去掉inode的话去掉的数据量总是cluster的整倍数的!你要删掉一个字节的话,怎么玩啊?

发表者:httpaspjspphp

基本的操作就那些  
  不要怀疑系统的能力

.
处理 SSI 文件时出错
© 2006-2008 All Rights Reserved