文件分割与合并

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
#include<process.h>
#include<string.h>
#define N 58  //行数
#define M 124 //每一行的最大字符数

int getN(char *path);  //获得源文件行数
int getMax(char *path);	//获得每一行的字符数,返回最大的数
void dividile(char *path,int num);	//分割
void meger(char *path, int num);//合并
char *path = "C:\\Users\\Administrator\\Desktop\\英语.txt"; //源文件路径
char *newpath = "C:\\Users\\Administrator\\Desktop\\合并英语.txt";	//合并后文件的新路径
int getMax(char *path)
{

	FILE *pf = fopen(path, "r");
	if (pf!=NULL)
	{			  
		char ch[M] = { 0 };
		int i = -1;
		while (!feof(pf))
		{
			fgets(ch, M, pf);
			int length = strlen(ch);
			if (length>i)
			{
				i = length;

			}

		}
		return i;

	}
	else
	{
		return -1;
	}

}

int getN(char *path)
{
	FILE *pf = fopen(path, "r");
	if (pf!=NULL)
	{
		char ch[M] = { 0 };
		int i = 0;
		while (!feof(pf))
		{
			fgets(ch, M, pf);
			i++;

		}
		return i;


	}		
	else
	{
		return -1;
	}


}

void dividile(char *path,int num)
{
	if (N%num==0)
	{
		char **pp = (char **)malloc(sizeof(char *)*num);
		FILE *pfr = fopen(path, "r");
	
		for (int i = 0; i < num; i++)
		{
			pp[i] = malloc(sizeof(char)*M);
			memset(pp[i], '\0', M);
			sprintf(pp[i], "C:\\Users\\Administrator\\Desktop\\英语%d.txt", i + 1);

			char ch[M] = { 0 };
			FILE *pfw = fopen(pp[i], "w");
			for (int j = 0; j < N/num; j++)
			{
				fgets(ch, M, pfr);
				fputs(ch, pfw);
			}
			fclose(pfw);
		}
		fclose(pfr);

	}
	else
	{
		char **pp = (char **)malloc(sizeof(char *)*(num-1));
		FILE *pfr = fopen(path, "r");

		for (int i = 0; i < num-1; i++)
		{
			pp[i] = malloc(sizeof(char)*M);
			memset(pp[i], '\0', M);
			sprintf(pp[i], "C:\\Users\\Administrator\\Desktop\\英语%d.txt", i + 1);

			char ch[M] = { 0 };
			FILE *pfw = fopen(pp[i], "w");
			for (int j = 0; j < N / (num-1); j++)
			{
				fgets(ch, M, pfr);
				fputs(ch, pfw);
			}
			fclose(pfw);
		}

		pp[num-1] = malloc(sizeof(char)*M);
		memset(pp[num-1], '\0', M);
		sprintf(pp[num-1], "C:\\Users\\Administrator\\Desktop\\英语%d.txt", num);
		char ch[M] = { 0 };
		FILE *pfw = fopen(pp[num-1], "w");
		for (int j = 0; j < N % (num - 1); j++)
		{
			fgets(ch, M, pfr);
			fputs(ch, pfw);
		}
		fclose(pfw);


		fclose(pfr);


	}

	

}

void meger(char *newpath, int num)
{
	char **pp = malloc(sizeof(char *)*N);
	FILE *pfw = fopen(newpath, "w");
	for (int i = 0; i < num; i++)
	{
		pp[i] = malloc(sizeof(char)*M);
		sprintf(pp[i], "C:\\Users\\Administrator\\Desktop\\英语%d.txt", i + 1);
		
		
		FILE *pfr = fopen(pp[i], "r");
		while (!feof(pfr))
		{
			char ch[M] = { 0 };
			fgets(ch, M, pfr);
			fputs(ch, pfw);
		}
		
		fclose(pfr);
	}
	fclose(pfw);

}
void main()
{
	int num;
	scanf("%d", &num);
	dividile(path, num); //切割num份
	//meger(newpath, num);		   将num份合并
	

	system("pause");
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值