“文秘”这个词很诱人吧,我们在平时总会碰到这样的问题,我们要将自己喜欢的程序,文本,mp3等存盘,由于它们太大了,而无法实现,于是我遍了这个程序,它可以完成文件的分割,和并。你可以将文件分割成若干分,然后分别存盘,再将他们合并,我已经实验过了,它可以将任何文件分割,合并。合并时一定要按顺序合并,你只要填入被分割的子文件名按着提示做即可。这个程序最大的特点是他的添加性,这个程序的每个功能都由函数独立完成,各位有爱好的朋友可以继续添加它的功能,如 文件的加密等。
由于我用是汉字,所以你最好用ccdos运行它!~·!
#include<stdio.h>
#define SIZE 1024
char buff[SIZE];
FILE *fpn,*fpo;
unsigned double sizef,ev_sizef;
main()
{
begin();
}
begin() /*主界面的选择菜单*/
{
int n;
clrscr();
do
{
printf("\n请选择你需要的文件操作 1.分割文件 2.合并文件 3.退出系统 :");
scanf("%d",&n);
if(n==1)
divid();
else
if(n==2)
unite();
else
if(n==3)
exit(0);
}while(n<1||n>3);
}
unite() /*合并文件*/
{
int n;
char name[25],c;
lp:
lp1:
printf("\n请输入你要合并文件后生成的文件路径:");
scanf("%s",name);
if((fpn=fopen(name,"wb"))==NULL)
{
printf("\n你输入的文件路径有误,是否从新输入(Y/N):");
getchar();
c=getchar();
if(c=='Y'||c=='y')
goto lp1;
else
begin();;
}
unitefile();
printf("\n文件合并成功,是否继续合并其它文件(Y/N)");
getchar();
c=getchar();
if(c=='Y'||c=='y')
goto lp;
else
begin();
}
unitefile() /*合并文件*/
{
int i=1;
char name[25],c;
do
{
lp1:
printf("\n请输入你要合并的第%d个新文件的文件路径:",i);
scanf("%s",name);
if((fpo=fopen(name,"rb"))==NULL)
{
printf("\n你输入的文件路径有误,是否从新输入(Y/N):");
if(getchar()=='Y'||getchar()=='y')
goto lp1;
else
begin();
}
while(fread(c,1,1,fpo))
fwrite(c,1,1,fpn);
fclose(fpo);
printf("\n是否继续合并(Y/其他键): ");
getchar();
c=getchar();
}while(c=='y'||c=='Y');
fclose(fpn);
}
divid() /*分割文件*/
{
int n;
char name[25],c;
lp:
lp1:
printf("\n请输入你要分割文件的文件路径:");
scanf("%s",name);
if((fpo=fopen(name,"rb"))==NULL)
{
printf("\n你输入的文件路径有误,是否从新输入(Y/N):");
getchar();
c=getchar();
if(c=='Y'||c=='y')
goto lp1;
else
begin();
}
printf("\n你要把分割文件分割成几份:");
lp2:
scanf("%d",&n);
if(n<1)
{ printf("\n对不起,请输入正确的数"); goto lp2;}
else
sizef=sizefile(fpo);
ev_sizef=sizef/n; /*被分割后每一个子文件的大小*/
printf("\n文件大小为:%.0f字节,分割后每个文件大约为:%.0f字节",sizef,ev_sizef);
dividefile(n);
printf("\n文件分割成功,是否继续分割(Y/N)");
getchar();
c=getchar();
if(c=='Y'||c=='y')
goto lp;
else
begin();
}
int sizefile(fp) /*计算文件的大小*/
FILE *fp;
{
sizef=0;
while(!feof(fp))
{ fgetc(fp);
sizef++; }
rewind(fp);
return sizef-1;
}
dividefile(int n) /*分割文件*/
{
int i,d=1;
char name[25],c;
for(i=1;i<=n;i++)
{
lp1:
printf("\n请输入分割后,生成的第%d个新文件的文件路径:",i);
scanf("%s",name);
if((fpn=fopen(name,"wb"))==NULL)
{
printf("\n你输入的文件路径有误,是否从新输入(Y/N):");
if(getchar()=='Y'||getchar()=='y')
goto lp1;
else
{ fclose(fpo); begin();}
}
d=1;
if(i!=n)
while(d<=ev_sizef)
{ fputc(fgetc(fpo),fpn); d++;}
else
while(fread(c,1,1,fpo))
{
fwrite(c,1,1,fpn);
}
fclose(fpn);
}
fclose(fpo);
}
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |