问:文件操作函数fread能操作900M-1G以上的文件吗?在操作900M这样有异常了,,,,在Win32下的大体积文件操作用那些函数好呢?

解决方案 »

  1.   

    fread能操作900M-1G以上的文件,应该是你代码或者系统有问题了.
      

  2.   

    我看可能也是:
      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;   //数据不太对
      到底那有问题???
      

  3.   

    内存文件映射 如何与我定义的结构struct INDEX_DATA  
      {  
      char code[10];  
      int dayrecordnum;
      unsigned short int reocrd[25];  
      } *day;读取能?
      

  4.   

    2G以下没问题,如果采用一些技巧,可以读取4G以下的文件。
    主要是fseek(fp, offset, SEEK_SET);其中的offset是有符合长整型,最多到了2G就会变成-1
      

  5.   

    VC6 下的CFile 类可操作到4G的文件 
      

  6.   

    我猜有几种可能.
    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长度是否有问题.
      

  7.   

    _stat函数 一次可导入缓冲的 的文件大小是多少?
      

  8.   

    CreateFile
    ReadFile
    WriteFile
      

  9.   

    VC6下是不行的,因为文件长度类型用的是LONG,VS2008是可以的,因为用的是ULONGLONG(unsinged Int64)。MFC版本不同。
      

  10.   

    CFile64http://www.codeproject.com/KB/system/cfile64.aspx
      

  11.   

    http://download.csdn.net/source/984330
      

  12.   

    IO操作其实就是控制文件指针在磁道上跑
    多大都没关系
    不过要是读到内存里就不一样了
    因为内存有限制
    所以一般处理大文件就会采用内存映射的方式
    这也是虚拟内存的一个内部机制
    至于内存映射怎么操作
    可以看看这个
    http://baike.baidu.com/view/394293.htm
      

  13.   

    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的