1.读取需要操作的文件,按大小进行分割成若干个文件,并将其文件名保存到filename.txt文件中;
2.将已经分割好的文件进行合并操作;
一、定义文件分割函数 file_segmentation()
int file_segmentation()
{
FILE *fpr; /*读文件指针*/
FILE *fpw; /*写文件指针*/
FILE *fplist; /**/
long offset; /*文件指针位置*/
long fsize; /*文件大小*/
long fblock = 1024 * 50; /* 1 M */
char data;
unsigned int size_r;
int number;
char file_name[20];
int file_id; /*新文件名id,001,002*/
printf("请输入想要操作的文件名:");
scanf("%s",file_name);
printf("请输入操作文件的大小:");
scanf("%d",&number);
fpr = fopen(file_name,"rb");
if(!fpr)
{
printf("文件打开失败!\n");
return 0;
}
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); /* demo.001 */
fpw = fopen(file_name,"wb"); /*创建新文件*/
fplist = fopen("filelist.txt","w");
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); /* demo.00x */
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);
return 0;
}
二、定义文件合并的函数file_merge()
int file_merge()
{
FILE *fpr;
FILE *fpw;
FILE *fplist;
char file_name[20];
char filename[20];
int file_id,i;
char data;
unsigned int size_r;
char name[20];
printf("请输入需要操作的文件名:");
scanf("%s",filename);
/*创建要写入文件*/
fpw = fopen(filename,"wb");
if(!fpw)
{
printf("文件创建失败!\n");
exit(1);
}
fplist = fopen("filelist.txt","r");
while(fgets(file_name,20,fplist) != NULL)
{
printf("%s",file_name);
file_name[strlen(file_name)-1]='\0';
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);
}
fclose(fpw);
printf("文件合并成功!\n");
return 0;
}
三、定义文件操作的登陆系统
void display_menu()
{
system("color e3");
printf("*********************请选择需要操作的功能*******************************\n");
printf("************************1.文件分割功能**********************************\n");
printf("************************2.文件合并功能**********************************\n");
printf("***************************3.退出***************************************\n");
printf("***************************请选择(1-3)********************************\n");
return;
}
四、定义主函数
int main(int argc , char* argv[])
{
char options;
display_menu();
for(;;)
{
printf("请输入需要执行的序号:");
scanf("%c", &options);
switch(options)
{
case '1':
file_segmentation();
break;
case '2':
file_merge();
break;
case '3':
exit(0);
default: exit(0);
}
display_menu();
getchar();
scanf("%c",&options);
}
return 0;
}
五、使用代码行进行操作
if(strcmp( "s", argv[2]) == 0){
if(argc < 5)
{
display_menu();
return 0;
}
file_segmentation(argv[3],strtol(argv[4],NULL,10));
}
else if(strcmp("m",argv[2]) == 0){
if(argc < 4)
{
display_menu();
return 0;
}
file_merge(argv[3]);
}else
{
display_menu();
return 0;
}
六、代码实现
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int file_segmentation();
int file_merge();
void display_menu()
{
system("color e3");
printf("*********************请选择需要操作的功能*******************************\n");
printf("************************1.文件分割功能**********************************\n");
printf("************************2.文件合并功能**********************************\n");
printf("***************************3.退出***************************************\n");
printf("***************************请选择(1-3)********************************\n");
return;
}
int main(int argc , char* argv[])
{
char options;
display_menu();
for(;;)
{
printf("请输入需要执行的序号:");
scanf("%c", &options);
switch(options)
{
case '1':
file_segmentation();
break;
case '2':
file_merge();
break;
case '3':
exit(0);
default: exit(0);
}
display_menu();
getchar();
scanf("%c",&options);
}
return 0;
}
int file_segmentation()
{
FILE *fpr; /*读文件指针*/
FILE *fpw; /*写文件指针*/
FILE *fplist; /**/
long offset; /*文件指针位置*/
long fsize; /*文件大小*/
long fblock = 1024 * 50; /* 1 M */
char data;
unsigned int size_r;
int number;
char file_name[20];
int file_id; /*新文件名id,001,002*/
printf("请输入想要操作的文件名:");
scanf("%s",file_name);
printf("请输入操作文件的大小:");
scanf("%d",&number);
fpr = fopen(file_name,"rb");
if(!fpr)
{
printf("文件打开失败!\n");
return 0;
}
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); /* demo.001 */
fpw = fopen(file_name,"wb"); /*创建新文件*/
fplist = fopen("filelist.txt","w");
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); /* demo.00x */
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);
return 0;
}
int file_merge()
{
FILE *fpr;
FILE *fpw;
FILE *fplist;
char file_name[20];
char filename[20];
int file_id,i;
char data;
unsigned int size_r;
char name[20];
printf("请输入需要操作的文件名:");
scanf("%s",filename);
/*创建要写人文件*/
fpw = fopen(filename,"wb");
if(!fpw)
{
printf("文件创建失败!\n");
exit(1);
}
fplist = fopen("filelist.txt","r");
while(fgets(file_name,20,fplist) != NULL)
{
printf("%s",file_name);
file_name[strlen(file_name)-1]='\0';
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);
}
fclose(fpw);
printf("文件合并成功!\n");
return 0;
}
七、代码实现结果:
注:仅为个人想法,不喜勿喷!!!