| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 968 人关注过本帖
标题:[求助]压缩文件遇到的问题!
只看楼主 加入收藏
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
结帖率:74.19%
收藏
 问题点数:0 回复次数:6 
[求助]压缩文件遇到的问题!


实在是没着拉
一个机子一个运行结果!!
关键那个机子的运行结果都不对

程序介绍:这个程序运用是最简单的压缩方法,数据:2222压缩成 4 2 分成2个文件分装
这种方法处理完成后再连接两个文件(这一部我的程序没有写)
源程序:

#include <stdio.h>

int reduce(char *file_name); /*压缩一个文件*/
int dell_fill(char *file1_name,char *file2_name);/*删除两个文件*/
int re_file(char *file1_name,char *file2_name);/*解压缩两个文件*/

main()
{
char *file_name="E:\\file.txt";

reduce(file_name);

puts("\nend!");

getch();
}

int reduce(char *file_name)
{
FILE *fp,*fp1,*fp2;
long fnum=0;
int f=0,f_h=1,flag,i;
char *file1_name,*file2_name;


if((fp=fopen(file_name,"rb"))==NULL)
{
printf("Open the \"%s\" error!",file_name);
getch();
exit(1);
}
i=0;
flag=0;
do
{
if(file_name[i]=='.')
{
file1_name[i]='a';
file1_name[i+1]='.';

file2_name[i]='b';
file2_name[i+1]='.';

flag=1;
}
else
{
file1_name[i+flag]=file_name[i];

file2_name[i+flag]=file_name[i];
}

}while(file_name[i++]!=0);

if(!flag)
{
file1_name[i]='a';

file2_name[i]='b';
}

if((fp1=fopen(file1_name,"w+"))==NULL)
{
printf("Creat the \"%s\" error!",file1_name);
getch();
exit(1);
}

if((fp2=fopen(file2_name,"w+"))==NULL)
{
printf("Creat the \"%s\" error!",file2_name);
getch();
exit(1);
}

f_h=fgetc(fp);
while(f!=-1)
{
f=fgetc(fp);
if(f_h==f)
{
fnum++; /*解除长整形限制*/
}
else
{
do
{
fputc(fnum%256,fp1);
fputc(f_h,fp2);
}while(fnum/=256);
fnum=0;
}

f_h=f;
}

fclose(fp);
fclose(fp1);
fclose(fp2);

re_file(file1_name,file2_name);
dell_fill(file1_name,file2_name);
}

int dell_fill(char *file1_name,char *file2_name)
{
unlink(file1_name);
unlink(file2_name);
}

int re_file(char *file1_name,char *file2_name)
{
FILE *fp,*fp1,*fp2;
int f=0,f_h,i,flag;
char *file_name;

if((fp1=fopen(file1_name,"rb"))==NULL)
{
printf("Creat the \"%s\" error!",file1_name);
getch();
exit(1);
}
if((fp2=fopen(file2_name,"rb"))==NULL)
{
printf("Creat the \"%s\" error!",file2_name);
getch();
exit(1);
}

i=0;
flag=0;
do
{
if(file1_name[i]=='.')
{
file_name[i-1]='.';

flag=-1;
}
else
file_name[i+flag]=file1_name[i];

}while(file1_name[i++]!=0);

if(!flag)
file_name[i-1]=0;

if((fp=fopen("E:\\fil.txt","wt"))==NULL)
{
printf("Creat the \"%s\" error!",file_name);
getch();
exit(1);
}

while(f!=-1)
{
f=fgetc(fp1);
f_h=fgetc(fp2);
for(i=0;i<=f;i++)
{
fputc(f_h,fp);
}
}

fclose(fp);
fclose(fp1);
fclose(fp2);
}

搜索更多相关主题的帖子: 文件 压缩 
2006-08-04 17:12
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 

怎么沉帖拉
是我写的太乱么?

要是大家实在不喜欢看我写的这个东西,那谁能帮我写个这样的程序啊?
有点急用(还有点郁闷!)

顺便想问问谁有什么好的压缩文件算法?!

2006-08-06 19:13
cindy9902
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-5-10
收藏
得分:0 

我是菜鸟,确实不会
帮你顶一下吧……

2006-08-08 13:14
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 

终于改过来拉!



#include <stdio.h>

int reduce(char file_name[]); /*压缩一个文件*/
int dell_fill(char file1_name[],char file2_name[]);/*删除两个文件*/
int re_file(char file1_name[],char file2_name[]);/*解压缩两个文件*/

main()
{
char file_name[30]="E:\\file.txt";

reduce(file_name);

puts("\nend!");

getch();
}

int reduce(char file_name[])
{
FILE *fp,*fp1,*fp2;
long fnum=0;
int f=0,f_h=1,flag,i;
char file1_name[30],file2_name[30];


if((fp=fopen(file_name,"rb"))==NULL)
{
printf("Open the \"%s\" error!",file_name);
getch();
exit(1);
}
i=0;
flag=0;
do
{
if(file_name[i]=='.')
{
file1_name[i]='a';
file1_name[i+1]='.';

file2_name[i]='b';
file2_name[i+1]='.';
\
flag=1;
}
else
{
file1_name[i+flag]=file_name[i];

file2_name[i+flag]=file_name[i];
}

}while(file_name[i++]!=0);

if(!flag)
{
file1_name[i]='a';

file2_name[i]='b';
}

if((fp1=fopen(file1_name,"w+"))==NULL)
{
printf("Creat the \"%s\" error!",file1_name);
getch();
exit(1);
}

if((fp2=fopen(file2_name,"w+"))==NULL)
{
printf("Creat the \"%s\" error!",file2_name);
getch();
exit(1);
}

f_h=fgetc(fp);
while(f!=-1)
{
f=fgetc(fp);
if(f_h==f)
{
fnum++; /*解除长整形限制*/
}
else
{
do
{
fputc(fnum%256,fp1);
fputc(f_h,fp2);
}while(fnum/=256);
fnum=0;
}

f_h=f;
}

fclose(fp);
fclose(fp1);
fclose(fp2);

re_file(file1_name,file2_name);
dell_fill(file1_name,file2_name);
}

int dell_fill(char file1_name[],char file2_name[])
{
unlink(file1_name);
unlink(file2_name);
}

int re_file(char file1_name[],char file2_name[])
{
FILE *fp,*fp1,*fp2;
int f=0,f_h,i,flag;
char file_name[30];

if((fp1=fopen(file1_name,"rb"))==NULL)
{
printf("Creat the \"%s\" error!",file1_name);
getch();
exit(1);
}
if((fp2=fopen(file2_name,"rb"))==NULL)
{
printf("Creat the \"%s\" error!",file2_name);
getch();
exit(1);
}

i=0;
flag=0;
do
{
if(file1_name[i]=='.')
{
file_name[i-1]='.';

flag=-1;
}
else
file_name[i+flag]=file1_name[i];

}while(file1_name[i++]!=0);

if(!flag)
file_name[i-1]=0;

if((fp=fopen("E:\\fil.txt","wt"))==NULL)
{
printf("Creat the \"%s\" error!",file_name);
getch();
exit(1);
}

while(f!=-1)
{
f=fgetc(fp1);
f_h=fgetc(fp2);
for(i=0;i<=f;i++)
{
fputc(f_h,fp);
}
}

fclose(fp);
fclose(fp1);
fclose(fp2);
}


但是还是不知道为什么?
怎么把指针改到数组就OK拉?


而且同时又产生了另一个问题:
就是但FILE。TXT文件中没有回车时压缩不会出错
但是要是当中有回车符的话那压缩出来的文件肯定出错?!

2006-08-11 08:57
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 

是我马虎拉
不是回车符
是数据 10
如果你向文件存储一个数据10 那你存储的就是 13 10
也就是它自动给10前加个13
不可理解 为什么系统要那么设定?!

但是更不理解的是为什么没人理我??????

2006-08-16 17:01
fangfangff
Rank: 1
等 级:新手上路
威 望:2
帖 子:479
专家分:0
注 册:2006-12-22
收藏
得分:0 
我改不来,我来顶好了!!!!!!!!!
顶起! !!!!!!!!!!!

千里冰封---My Love 尽管相隔千里 , 依然拥有冰封
2007-06-17 22:54
快速回复:[求助]压缩文件遇到的问题!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018458 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved