C#实现文件的分割和合并

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;

}

七、代码实现结果:

注:仅为个人想法,不喜勿喷!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值