思路
切割
读取文件,按输入大小进行切割,截取文件名做为切割文件名,并把切割的各个文件名存到./data/filelist.txt中
合并
读取./data/filelist.txt中的分割文件名,循环读取文件,并写进新的文件中。
流程图
代码
菜单
void DispalyMenu(){
printf("==============请选择功能==============\n");
printf("= 1.切割 =\n");
printf("= 2.合并 =\n");
printf("= 3.退出 =\n");
printf("======================================\n");
return;
}
主函数
int main(int argc,char* argv[])
{
char option;
DispalyMenu();
scanf("%c",&option);
while(1){
switch(option){
case '1': FileCutting();break;
case '2': FileMerge();break;
case '3': exit(0);
default: exit(0);
}
DispalyMenu();
getchar();
scanf("%c",&option);
}
return 0;
}
字符串切割
传入传字符,以"."为条件结束,最后只返回文件名。
char * NameSqlit(char *filename){
char *name;
int n = strlen(filename);
int i = 0;
name = (char *)malloc(n-4);
while(*(filename+i) != '.'){
*(name+i) = *(filename+i);
i++;
}
*(name+i) = '\0';
return name;
}
文件切割
int FileCutting(){
FILE *fpr; /*读文件指针*/
FILE *fpw; /*写文件指针*/
FILE *fplist; /**/
char file_name[20];
int file_id; /*新文件名id,001,002*/
int n = 0;
long offset; /*文件指针位置*/
long fsize; /*文件大小*/
long fblock = 0; /* 1 M */
char data;
unsigned int size_r;
printf("请输入文件名\n");
scanf("%s",file_name);
printf("请输入切割大小(输入50则拆分50K一份)\n"