永发信息网

C言语fopen 处理不了大文件,我处理2k的可以,但是已处理0.98M 的就出错,什么原因,好急。。。。。

答案:2  悬赏:0  手机版
解决时间 2021-11-10 13:33
  • 提问者网友:孤凫
  • 2021-11-09 17:08
C言语fopen 处理不了大文件,我处理2k的可以,但是已处理0.98M 的就出错,什么原因,好急。。。。。
最佳答案
  • 五星知识达人网友:千杯敬自由
  • 2021-11-09 18:48
我确定,C语言的fopen是可以处理大文件的,楼主的程序出错,错不在fopen,肯定在别的什么地方,不妨把代码贴出来看看。追问大哥,我把代码贴出来了,我是MFC下,有这段代码的,要是小数据可以读出来,大数据就死机了。。。急死了。。。追答我深入分析了一下你这个程序段,我发现的可能出现程序死掉的地方有如下两个:
一、指定文件不存在,则会直接报错。
二、文件格式与预期不符,fscanf无法读取合适的数据,读取指针不会按照预期向后移动,造成程序反复尝试读取相同的东西(读取总不成功),进入死循环,永远到达不了文件尾部,形成死机假象。
比如:
fscanf(fp,"%f",&sum);

读到的数据是一个字符串,不是浮点数,读取失败,读取指针不移动,就会陷入死循环。

您的程序对文件中的数据格式要求比较高,所以,我也无法细说,楼主仔细想想是不是怎么回事。追问我试了一下,我把数据弄个10行左右,还是可以读取的。。。我真不知道是什么原因,好苦恼。是不是缓存之类的东西。。。。这些我不是很懂追答教你一个比较简单的办法,你在程序中再打开一个新文件来写入,程序中读取一个字符就输出一个字符到这个新文件中,当程序死机的时候,检测输出的新文件的内容,看看输出了多少,就可以确定程序卡在哪里了。

看看我写的代码,基本上能够完成你说的任务,楼主试试看:
int main()
{
char chTemp[0x1000];///////////
int minpoint = 0;///////////
int maxpoint = 0;///////////

FILE* fp;
fpos_t home;
fp=fopen(".\\band2.txt","r");///////////
char a;
float sum,totol=0;
a=fgetc(fp);
int flag=0,num;
int i=0;
while (!feof(fp))
{
if (a==';')
{
fgets(chTemp, 0x1000, fp);///////////
a=fgetc(fp);
}
else
{
ungetc(a, fp);///////////
fscanf(fp,"%f",&sum);
num=(int)(sum/0.1+0.5);
if(minpoint>num) minpoint=num;
if(maxpoint a=fgetc(fp);
// i++;
}
}
fclose(fp);
printf("%d %d",minpoint ,maxpoint);

return 0;
}
全部回答
  • 1楼网友:行雁书
  • 2021-11-09 19:48
CString st;是什么,放在这编译通过吗?
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯