编写一个程序,将文件打包,在需要解包。可以得到你想要的打包中的文件。
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;
}
}
}
#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;
}
}
}
相关文章推荐
- 使用write函数来编写一个程序,在程序中指定一个文件,用户可以向程序中一次写入不超过80个字符的数
- 编写一个程序,一行行地读取输入行,直至到达文件尾。算出每行输入行的长度,然后把最长的那行打印出来。为了简单起见,你可以假定所有的输入行均不超过1000个字符
- 怎样把一个写好的程序,打包成一个文件。.exe的,这样我一点击就可以运行,好像网上说这个是绿色软件
- 编写一个程序,一行行地读取输入行,直至到达文件尾。算出每行输入行的长度,然后把最长的那行打印出来。为了简单起见,你可以假定所有的输入行均不超过1000个字符。
- 1.编写一个简单的C语言程序:根据输入的两个整数求平均值并且在终端输出,通过gcc编译器得到它的汇编程序文件。 2.编写一个C语言程序:打印输出所有“水仙花数”,用gdb调试程序(给出步骤)。所谓“
- 编写一个程序,使其从标准输入读取字符,直到遇到文件结尾。对美个字符 程序需要检查并报告改字符是否是一个字母。如果是报告字母在字符表中的位置,否则返回-1
- 这是一个用于拦截android实时短信的库,可以进行短信过滤,得到自己想要的内容,可以用于需要自动填写短信验证码的app项目
- 1.编写一个简单的C语言程序:根据输入的两个整数求平均值并且在终端输出,通过gcc编译器得到它的汇编程序文件。 2.编写一个C语言程序:打印输出所有“水仙花数”,用gdb调试程序(给出步骤)。所谓“
- WinRAR将多个文件打包一个EXE文件(用此程序可以打包)
- 编写一个程序,一行行地读取输入行,直至到达文件尾。算出每行输入行的长度,然后把最长的那行打印出来。为了简单起见,你可以假定所有的输入行均不超过1000个字符
- 编写一个可以自动执行的.jar文件
- 一个使用JAVA编写的类似按键精灵的程序,支持脚本文件编写(含源代码)
- 用BAT文件编写一个不用重启,隔5分钟就换一个IP的程序
- 【Ant】Ant实例(1)一个Java文件依赖于某jar包,需要打包部署
- 用BAT文件编写一个不用重启,隔5分钟就换一个IP的程序
- 一个使用JAVA编写的类似按键精灵的程序,支持脚本文件编写(含源代码)
- 【2010年1月6日】编写文件打包工具程序,加密暂时不考虑
- 突然想要做个新闻内容的分页,网上查了下资料,找到了一个可以用的类(代码需要自己研究下,我已经试验成功了)
- 共享一个免费文件管理程序,可以嵌入你自己的网站中使用!
- 一个可以打开常用程序文件的菜单