//文件拆分
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void menu(void);
void my_divide(void);
int sizefile(FILE* fp);
int main(void)
{
menu();
return 0;
}
void menu(void)
{
int m= -1;
printf("please choose you needful file:1.divide file2.exit\n");
scanf("%d", &m);
switch (m)
{
case 1://冒号应该在1的后面
my_divide();
break;
case 2:
exit(0);//需要#include<stdlib>;
break;
default:
printf("please enter number like 123\n");
menu();
break;
}
}
void my_divide(void)
{
FILE * fp_old, * fp_new;//不要忘了第二个*
int i, n;
int c = 1;
while (c)
{
printf("please enter the position of file you want to divide:");
char old_name[100];//最好用宏定义,方便修改
scanf("%s", old_name);//old_name为数组名,不用加&
if ((fp_old = fopen(old_name, "rb")) == NULL)//不要忘了rb外的“”
{
printf("sorry,you enter the invalid position,do your want to enter again?(Y or N)");
getchar();//scanf会忽略回车符,使之留在缓冲区
char c = getchar();
if (c == 'N' || c == 'n')
{
menu();
}
}
else
{
c = 0;
}
}
char name[100];
printf("please enter how many files you want to divide:");
scanf("%d", &n);
int num = sizefile(fp_old) / 3;
for (i = 1; i < n; i++)
{
printf("please enter your No. %d new file's position:", i);
scanf("%s", name);
if ((fp_new = fopen(name, "wb")) != NULL)
{
for (int j = 0; j < num; j++)
{
fputc(fgetc(fp_old), fp_new); //节约了一行
}
printf("Done!\n");
fclose(fp_new);//不要把fp_old也close了
}
else
{
printf("sorry,you enter the invalid position,please enter again:");
i--;
}
}
printf("please enter your No. %d new file's position:", n);
int a = 1;
while (a)
{
scanf("%s", name);
if ((fp_new = fopen(name, "wb")) != NULL)
{
while (!feof(fp_old))//没到文件结尾返回1
{
fputc(fgetc(fp_old), fp_new);
}
printf("Done!\n");
fclose(fp_old);
fclose(fp_new);
a = 0;
}
else
{
printf("please enter the valid position:");
}
}
}
int sizefile(FILE *fp)
{
int fsize=0;
while (!feof(fp))
{
fgetc(fp);
fsize++;
}
rewind(fp);
return fsize - 1;
}
文件的拆分
最新推荐文章于 2024-05-31 13:52:16 发布