您的位置:首页 > 其它

编写一个程序,将文件打包,在需要解包。可以得到你想要的打包中的文件。

2014-07-04 15:39 363 查看
这程序实现了任意文件的打包及解包,但是自己没有添加压缩及解压的算法。准确的来说应该是自己不知道算法。

#include<stdio.h>

#include<string.h>

//创建保存文件的名称及长度的结构体

struct filestruct

{

char filename[30];

int filelength;

};

//================================

//名称: menu

//功能: 显示菜单

//参数: void

//返回值: void

//================================

void menu(void)

{

printf("===========================\n");

printf("========1.打包文件=========\n");

printf("========2.解包文件=========\n");

printf("========3.退出=============\n");

printf("===========================\n");

}

//================================

//名称: FileLength

//功能: 计算文件的长度

//参数: String

//返回值:int

//================================

int FileLength(char String[])

{

FILE *fp;

char ch;

int Len=0;

fp=fopen(String,"rb");

while(1)

{

ch=fgetc(fp);

if(feof(fp))

{

break;

}

Len++;

}

return Len;

}

//================================

//名称: FileToZip

//功能: 打包文件

//参数: void

//返回值:void

//================================

void FileToZip(void)

{

FILE *fp,*fq;

char str1[30];

char str2[]={"#"};

char st[30];

char ch;

struct filestruct tmp;

//输入包名

printf("请输入包名:\n");

scanf("%s",st);

fp=fopen(st,"wb+");

//获取并打包文件名及文件内容

while(1)

{

printf("请输入要打包文件的文件名:‘#’表示结束打包:\n");

scanf("%s",str1);

if(strcmp(str1,str2)==0)

{

break;

}

fq=fopen(str1,"rb");

if(fq==NULL)

{

printf("文件不存在!!!");

break;

}

strcpy(tmp.filename,str1);

tmp.filelength=FileLength(tmp.filename);

fwrite(&tmp,sizeof(tmp),1,fp);

while(1)

{

fread(&ch,1,1,fq);

if(feof(fq))

{

fclose(fq);

break;

}

fwrite(&ch,1,1,fp);

}

//标记测试

printf("文件名字为%s\t文件的长度为%d\n",tmp.filename,tmp.filelength);

}

fclose(fp);

}

//================================

//名称: ZipToFile

//功能: 解开打包文件

//参数: void

//返回值: void

//================================

int ZipToFile(void)

{

int i;

char ch;

FILE *fp,*fq;

char String[30];

struct filestruct tmp;

printf("请输入你要解包的文件:\n");

scanf("%s",String);

//打开文件包

fp=fopen(String,"rb");

if(fp==NULL)

{

printf("文件不存在,打开失败!!!\n");

return;

}

//判断文件是否为空

if(feof(fp))

{

return;

}

//将文件包中的内容写出到文件中

printf("解包后包中的文件有:\n");

while(1)

{

if(feof(fp))

{

break;

}

fread(&tmp,sizeof(tmp),1,fp);

fq=fopen(tmp.filename,"wb+");

for(i=0;i<tmp.filelength;i++)

{

fread(&ch,1,1,fp);

if(feof(fp))

{

return;

}

fwrite(&ch,1,1,fq);

}

fclose(fq);

//标记测试

printf("文件名字为%s\t文件的长度为%d\n",tmp.filename,tmp.filelength);

}

fclose(fp);

}

//================================

//名称: main

//功能:

//参数: void

//返回值: void

//================================

void main(void)

{

int key;

while(1)

{

menu();

printf("请选择:\n");

scanf("%d",&key);

switch(key)

{

case 1:

FileToZip();

break;

case 2:

ZipToFile();

break;

case 3:

return;

break;

default :

break;

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐