问:文件操作函数fread能操作900M-1G以上的文件吗? 问:文件操作函数fread能操作900M-1G以上的文件吗?在操作900M这样有异常了,,,,在Win32下的大体积文件操作用那些函数好呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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长度是否有问题. _stat函数 一次可导入缓冲的 的文件大小是多少? CreateFileReadFileWriteFile VC6下是不行的,因为文件长度类型用的是LONG,VS2008是可以的,因为用的是ULONGLONG(unsinged Int64)。MFC版本不同。 CFile64http://www.codeproject.com/KB/system/cfile64.aspx http://download.csdn.net/source/984330 IO操作其实就是控制文件指针在磁道上跑多大都没关系不过要是读到内存里就不一样了因为内存有限制所以一般处理大文件就会采用内存映射的方式这也是虚拟内存的一个内部机制至于内存映射怎么操作可以看看这个http://baike.baidu.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的 单任务的阻塞式下载程序怎样实现排列式下载,即阻塞式多任务的? 关于slider的setpos的问题 MFC如何实现读取文本的内容显示为图表? 几个基础得不能再基础的问题,供大家参考 怎样编程解压一个RAR文件 如何在VC之中读取wav文件并显示波形图 找了半天也没有找到,各位老大help me CMFCPropertyGridProperty能否实现格子上移下移操作? 求救:mfc下hook没起作用的问题!!! 新手问题 c++ 封装 ActiveX 插件中,将 VARIANT 变量转化为 Array。 A坐标是时针中心点,A到B之间的长度为0度的情况下,求C的顺时针度数
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; //数据不太对
到底那有问题???
{
char code[10];
int dayrecordnum;
unsigned short int reocrd[25];
} *day;读取能?
主要是fseek(fp, offset, SEEK_SET);其中的offset是有符合长整型,最多到了2G就会变成-1
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长度是否有问题.
ReadFile
WriteFile
多大都没关系
不过要是读到内存里就不一样了
因为内存有限制
所以一般处理大文件就会采用内存映射的方式
这也是虚拟内存的一个内部机制
至于内存映射怎么操作
可以看看这个
http://baike.baidu.com/view/394293.htm
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的