栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言 文件分割、合并

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言 文件分割、合并

功能
  • 根据用户指定大小将一个文件分割为多个小文件
  • 将列表文件中的多个小文件合并成一个新文件
实现思路

        分割文件:用户通过命令行传递参数,将用户指定的文件分割为指定块大小的多个文件,并生成分割列表文件。

        组合文件:用户通过命令行传递参数,读取文件列表,将列表中的文件每一个按顺序写入到一个新文件中。

代码

命令说明:

主函数

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;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/529087.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号