关于拆分文件的 问题入内
看下面有个网友提出的问题 把一个大的文本文件分割成若干个小文件 最后一个文件为剩余字节 前几个文件大小都一致
自己写了一个 貌似思路比较清晰 实际和设想差距挺大的
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[])
//w21 w21.log 1000 wp cmd模式下测试此代码
// 其中 w21为自己编译的exe名 w21.log为待分割的文件名
// 1000为分割长度 wp为分割后的小文件名的前缀
{
char buf[100]={'\0'};
char t[100]={'\0'};
FILE * infile;
FILE * outfile;
if((infile=fopen(argv[1],"r"))==NULL)
{
printf("无法打开此文件\n");
return 0 ;
}
int i=0;
char ch;
int cout=0;
while(1)
{
itoa(i,t,10);
strcat(buf,argv[3]);
strcat(buf,t);
strcat(buf,".txt"); //以上几行代码用于连接输出自增型文件名
outfile=fopen(buf,"w") ;
while(!feof(infile))
{
ch=fgetc(infile);
fputc(ch,outfile);
++cout;
if(cout>=atoi(argv[2]))
{
fclose(outfile);
break;
}
}
printf("cout==%d argv[2]==%d \n",cout,atoi(argv[2])); //调试用
if(feof(infile)) break;
memset(buf,'\0',100);
i++;
cout=0;
}
fclose(infile);
char tmp[100]={'\0'}; //以下代码调试用
strcat(tmp,"dir ");
strcat(tmp,argv[1]);
system(tmp);
system("dir wp*.*");
return 0;
}
/*
D:\c_source\w16\w21\Debug>w21 w21.log 1000 wp
cout==1000 argv[2]==1000
cout==1000 argv[2]==1000
cout==1000 argv[2]==1000
cout==1000 argv[2]==1000
cout==1000 argv[2]==1000
cout==549 argv[2]==1000
驱动器 D 中的卷是 wanping-D
卷的序列号是 98D7-D39A
D:\c_source\w16\w21\Debug 的目录
2017-06-08 10:05 5,598 w21.log
1 个文件 5,598 字节
0 个目录 27,092,017,152 可用字节
驱动器 D 中的卷是 wanping-D
卷的序列号是 98D7-D39A
D:\c_source\w16\w21\Debug 的目录
2017-06-08 10:05 1,011 wp0.txt
2017-06-08 10:05 1,006 wp1.txt
2017-06-08 10:05 1,006 wp2.txt
2017-06-08 10:05 1,007 wp3.txt
2017-06-08 10:05 1,008 wp4.txt
2017-06-08 10:05 0 wp5.txt
6 个文件 5,038 字节
0 个目录 27,092,017,152 可用字节
*/
/*
这里出现了几个问题
1、分割后小文件 并不是理想中的长度为1000每个
2、出现了3个各不相同的文件大小 理论应该全部相等的 分别是 5594 5038 5549
*/
[此贴子已经被作者于2017-6-8 10:12编辑过]







