关于拆分文件的 问题入内
看下面有个网友提出的问题 把一个大的文本文件分割成若干个小文件 最后一个文件为剩余字节 前几个文件大小都一致
自己写了一个 貌似思路比较清晰 实际和设想差距挺大的
程序代码:
#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编辑过]