- 根据用户指定大小将一个文件分割为多个小文件
- 将列表文件中的多个小文件合并成一个新文件
分割文件:用户通过命令行传递参数,将用户指定的文件分割为指定块大小的多个文件,并生成分割列表文件。
组合文件:用户通过命令行传递参数,读取文件列表,将列表中的文件每一个按顺序写入到一个新文件中。
代码命令说明:
主函数
int main(int argc,char *argv[])
{
if( argc != 5)
{
printf("命令格式:n");
printf("t-t [s|c]n");
printf("tts:切割文件 n");
printf("ttc:组合文件 n");
printf("n");
printf("t-t s [文件路径] [切割块大小]n");
printf("t-t c [组合文件列表(filelist.txt)] [组合后文件名]n");
}
if( strcmp(argv[1],"-t") == 0 )
{
if( strcmp(argv[2],"s") == 0)
{
filesplit(argv[3],strtol(argv[4],NULL,10));
}
else if (strcmp(argv[2],"c") == 0)
{
filecombine(argv[3],argv[4]);
}
else
{
printf("参数argv[1]错误!n");
}
}
else
{
printf("命令格式错误!n");
exit(0);
}
return 0;
}
全部代码
#include#include char filesplit(char* sourcefile,int bl_size) { FILE *fpr; FILE *fpw; FILE *fplist; long offset; long fsize; long fblock = 1024 * bl_size; char data; unsigned int size_r; char file_name[20]; int file_id; fpr = fopen(sourcefile,"rb"); if(!fpr) { printf("文件打开失败!n"); exit(1); } offset = 0; fseek(fpr,0,SEEK_END); fsize = ftell(fpr); fseek(fpr,0,SEEK_SET); size_r = fread(&data,sizeof(char),1,fpr); file_id = 1; sprintf(file_name,"fv.%03d",file_id); fpw = fopen(file_name,"wb"); fplist = fopen("filelist.txt","w"); printf("文件正在分割...n"); while(size_r>0) { fwrite(&data,sizeof(char),1,fpw); offset = ftell(fpr); if(offset % fblock == 0) { fclose(fpw); fputs(file_name,fplist); fputs("n",fplist); file_id++; sprintf(file_name,"fv.%03d",file_id); fpw = fopen(file_name,"wb"); } size_r = fread(&data,sizeof(char),1,fpr); } if(fpw) { fputs(file_name,fplist); fputs("n",fplist); fclose(fpw); } fclose(fplist); fclose(fpr); printf("文件分割完成!"); return 0; } void filecombine(char* filelist,char* des_file) { FILE *fpr; FILE *fpw; FILE *fplist; char file_name[20]; int file_id,i; char data; unsigned int size_r; fpw = fopen(des_file,"wb"); if(!fpw) { printf("文件创建失败!n"); exit(1); } fplist = fopen(filelist,"r"); fgets(file_name,20,fplist); while(file_name != NULL) { printf("%s",file_name); file_name[strlen(file_name)-1]=' '; fpr = fopen(file_name,"rb"); if(!fpr) { printf("打开文件%s失败n",file_name); exit(1); } size_r = fread(&data,sizeof(char),1,fpr); while(size_r>0) { fwrite(&data,sizeof(char),1,fpw); size_r = fread(&data,sizeof(char),1,fpr); } fclose(fpr); fgets(file_name,20,fplist); } fclose(fpw); } int main(int argc,char *argv[]) { if( argc != 5) { printf("命令格式:n"); printf("t-t [s|c]n"); printf("tts:切割文件 n"); printf("ttc:组合文件 n"); printf("n"); printf("t-t s [文件路径] [切割块大小]n"); printf("t-t c [组合文件列表(filelist.txt)] [组合后文件名]n"); } if( strcmp(argv[1],"-t") == 0 ) { if( strcmp(argv[2],"s") == 0) { filesplit(argv[3],strtol(argv[4],NULL,10)); } else if (strcmp(argv[2],"c") == 0) { filecombine(argv[3],argv[4]); } else { printf("参数argv[1]错误!n"); } } else { printf("命令格式错误!n"); exit(0); } return 0; }



