hur.cn - 华软网

 热门搜索

问:文件操作函数fread能操作900M-1G以上的文件吗?

  作者:未知    来源:网络    更新时间:2010/12/7
问:资料操作函数fread能操作900M-1G以上的资料吗?在操作900M这样有异常了,,,,在Win32下的大体积资料操作用那些函数好呢?
---华软 网友回答---
fread能操作900M-1G以上的资料,应该是你代码或系统有问题了.
---华软网友回复---
我看可能也是:
  struct INDEX_DATA       
        {      
                char code[10];               
                int  dayrecordnum;
                unsigned short int reocrd[25];               
        } *day;

  if((day = (struct INDEX_DATA*)malloc(20 *sizeof(struct INDEX_DATA))) == NULL) //定义20
       exit( - 1);
.....
  FILE *fp = fopen("data.dat", "r");
...
  for(i=0; i<20; i++)
            fread(&day[i], sizeof(struct INDEX_DATA), 1, fp);
    fclose(fp);
 ....
...再取数据就有问题
CString str;
   str = day[4].code;   //数据不太对
  到底那有问题???



---华软网友回复---
用内存资料映照去做
---华软网友回复---
“内存资料映照”没弄过,这个有例子吗?谢谢!
---华软网友回复---
内存资料映照 如何与我定义的结构struct INDEX_DATA  
  {  
  char code[10];  
  int dayrecordnum;
  unsigned short int reocrd[25];  
  } *day;读取能?
---华软网友回复---
2G以下没问题,如果采取一些技巧,能够读取4G以下的资料。
主要是fseek(fp, offset, SEEK_SET);其中的offset是有合适长整型,最多到了2G就会酿成-1
---华软网友回复---
这个确实头痛
---华软网友回复---
VC6 下的CFile 类可操作到4G的资料 
---华软网友回复---
我猜有几种可能.
1.char code[10]; 在写的时候没有初试化,写入了一些未初试化的内存里的东西.所以需要在写的时候在循环里清零.
for(i=0; i<20; i++)
{
memset((&day[i],0,sizeof(struct INDEX_DATA));
fwrite(&day[i], sizeof(struct INDEX_DATA), 1, fp);
}
2.data.dat被写坏了,建议用二进制手工编辑data.dat,看看day[4].code是否是坏了.但如果day[4].dayrecordnum没问题,那可能照旧上面第一条的原因.
3.data.dat是另外系统生成的,涉及字节对齐的问题,需要确定INDEX_DATA长度是否有问题.

---华软网友回复---
9楼建议不错
---华软网友回复---
_stat函数 一次可导入缓冲的 的资料巨细是几多?
---华软网友回复---
32位机器内存足够的话是能够的。

---华软网友回复---
CreateFile
ReadFile
WriteFile
---华软网友回复---
引用 8 楼 vc8fans 的回复:
VC6 下的CFile 类可操作到4G的资料

VC6下是不行的,由于资料长度类型用的是LONG,VS2008是能够的,由于用的是ULONGLONG(unsinged Int64)。MFC版本不同。
---华软网友回复---
CFile64

http://www.codeproject.com/KB/system/cfile64.aspx
---华软网友回复---
http://download.csdn.net/source/984330
---华软网友回复---
引用 16 楼 zzw820626 的回复:
http://download.csdn.net/source/984330


现成的好东西啊。快用把,用完给我分就好了。
---华软网友回复---
IO操作其实就是控制资料指针在磁道上跑
多大都没关系
不过要是读到内存里就不一样了
由于内存有限制
所以一般措置惩罚大资料就会采取内存映照的方式
这也是虚拟内存的一个内部体制
至于内存映照怎么操作
能够看看这个
http://baike.百度.com/view/394293.htm
---华软网友回复---
17,18楼都正解,我现在用CFile类 由于在1-2G资料足够了,

9楼以为我的配置有问题,
fread(&day[i], sizeof(struct INDEX_DATA), 1, fp);
其实没有问题,资料体积小就OK,超过一定体积调试总通不过。。。。
看来 fread 只是一些DOS级的资料......

引用的一段话,
随着windows 2000和xp的普及,现在的大资料越来越多,而vc6中mfc的cfile类只支持不大于4gb的资料, 原因在于cfile类中运用了32位整型来措置惩罚资料,32位数的范围是2的32次方(4gb),超过这个范围的资料cfile就管不了,微软.net中 vc7的cfile类支持大于4gb的资料,而.net还不普及,开发桌面应用vc6照旧首选,所以咱们能够参照vc7写一个cfile的继承类 cfile64,使它支持大于4gb的
---华软网友回复---
  class="deleted_message"> 该回复于2012-05-19 11:11:25被版主删除        
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。