200分求助,按行分割超大大文本文件的问题,请高手赐教!!!

jorbin 2004-11-08 11:55:45
我用fopen打开文件,然后用fgets取记录,然后用fputs写入子文件,原文件很大,有将近2G,不过我用几十兆的文件也不行,好像是没取到记录,printf出来都是空的,是不是打开这种文件有大小限制,超过一定大小就无法正确读取或打开?
...全文
221 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
铖邑 2004-11-08
  • 打赏
  • 举报
回复
几十兆就不行了,说明不是这个问题。可能你的程序有问题,能不能贴出来看看?
jorbin 2004-11-08
  • 打赏
  • 举报
回复
非常感谢各位的热心帮忙,我已经找到问题所在了,是文件出了问题,不是程序,我要处理的文件打开看上去就是一般的文本,但是实际上显示的每个字符之间都有一个'\0'存在,所以...
铖邑 2004-11-08
  • 打赏
  • 举报
回复
你再试试看,应该是这个问题了,不然真的很难找出问题了。
铖邑 2004-11-08
  • 打赏
  • 举报
回复
不对,根目录对文件数目的限制是很严格的(因为FAT32的分区结构要求根目录的FAT必须在前几个扇区),你应该创建一个目录来存放文件。
wt_sanlian 2004-11-08
  • 打赏
  • 举报
回复
Win98下一个目录下最多能存6万多个文件,
其它操作系统没试过
铖邑 2004-11-08
  • 打赏
  • 举报
回复
我知道了,你把文件分解到同一个目录中,这样一个目录下文件太多了,会造成错误的。
jorbin 2004-11-08
  • 打赏
  • 举报
回复
没有问题?加上break只是因为要printf,而文件又太大,所以只打印前面20行看看,小文件是没有问题的,我试过几千行的
铖邑 2004-11-08
  • 打赏
  • 举报
回复
你先将“break;”去掉看看,我运行一把没有问题。
jorbin 2004-11-08
  • 打赏
  • 举报
回复
应该不是这个问题,我刚开始用FILE,后来试着用fstream,都不行,这段代码只是中间产物
铖邑 2004-11-08
  • 打赏
  • 举报
回复
if( count%20==0 )
{
outfile.close();
i++;
sprintf(FileWrite,"e:\\%d.txt",i);
outfile.open(FileWrite,ios::out);
break; // 这个应该去掉
}


还有,FILE *fpw=NULL,*fpr=NULL;
fstream outfile,infile;
到底想用FILE还是fstream?
jorbin 2004-11-08
  • 打赏
  • 举报
回复
没有异常,但是结果不对
free1688 2004-11-08
  • 打赏
  • 举报
回复
把你的代码放入异常判断中试试,看看那个地方出现问题。
jorbin 2004-11-08
  • 打赏
  • 举报
回复
小文件是没问题的,不过应该也不仅仅是文件大小的问题
jorbin 2004-11-08
  • 打赏
  • 举报
回复
FILE *fpw=NULL,*fpr=NULL;
fstream outfile,infile;
char record[1024];
char Filename[1024],FileWrite[1024];
int i=1;
long count=0;

if(argc>1)
strcpy(Filename,argv[1]);
else
{
printf("请输入要分割的文本文件名!\n");
return 0;
}
fpr=fopen(Filename,"r");
if( fpr==NULL)
{
printf("打开文件失败\n");
return 0;
}
fseek(fpr,0,SEEK_SET);
sprintf(FileWrite,"e:\\%d.txt",i);
outfile.open(FileWrite,ios::out);
memset(record,0,sizeof(record));
while(fgets(record,sizeof(record),fpr)!=NULL)
{

printf("record:%s\n",record);
outfile<<record;
cout<<record<<endl;
count++;
if( count%20==0 )
{
outfile.close();
i++;
sprintf(FileWrite,"e:\\%d.txt",i);
outfile.open(FileWrite,ios::out);
break;
}
memset(record,0,sizeof(record));
}
outfile.close();
fclose(fpr);
printf("共有记录:%d条\n",count);
return 0;

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧