#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int file_size(char* filename)//获取文件名为filename的文件大小。
{
FILE *fp = fopen(filename, "rb")//打开文件。
int size
if(fp == NULL) // 打开文件失败
return -1
fseek(fp, 0, SEEK_END)//定位文件指针到文件尾。
size=ftell(fp)//获取文件指针偏移量,即文件大小。
fclose(fp)//关闭文件。
return size
}
int main ()
{
int size=0
size=file_size("qw")
printf("%d\n",size)
FILE * pFile,*qw
char *buffer=(char*)malloc(sizeof(char)*size)
qw =fopen("qw","r")
pFile = fopen ( "qwe" , "wb" )
printf("%d==\n",pFile)
printf("%d\n",size)
fread(buffer,1,size,qw)
fwrite (buffer , sizeof(byte), size , pFile )
fclose (pFile)
rename("qwe","Groot.jpg")
return 0
}
扩展资料:
c语言读取TXT文件:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE 1024
int main()
{
char buf[MAX_LINE] /*缓冲区*/
FILE *fp /*文件指针*/
int len /*行字符个数*/
if((fp = fopen("test.txt","r")) == NULL)
{
perror("fail to read")
exit (1)
}
while(fgets(buf,MAX_LINE,fp) != NULL)
{
len = strlen(buf)
buf[len-1] = '\0' /*去掉换行符*/
printf("%s %d \n",buf,len - 1)
}
return 0
}
有这样一个二进制文件,大小在100M左右,里面存放了多张JPG图片,文件格式如下:无关数据区
JPG图片数据区
无关数据区
JPG图片数据区
无关数据区
JPG图片数据区
......
已知JPG图片起始标志为:“FF D8 FF E0 00 10 4A”,结束标志为:“FF D9”。
现想把这些JPG图片数据从该文件中读出来,生成一个个单独的图片文件,该如何做呢?
帮你写了个程序, 测试了只含有一个图片信息的文件
int len=0
int filesn=0
void ReadJpg(CFile *sfp,const char *dstfile,unsigned char a,unsigned char b)
{
CFile nf
nf.Open(dstfile,CFile::modeCreate|CFile::modeWrite|CFile::typeBinary)
unsigned t=0,t1=0
nf.Write(&a,sizeof(char))
nf.Write(&b,sizeof(char))
while(1)
{
sfp->Read(&t,sizeof(char))
len++
nf.Write(&t,sizeof(char))
if(t==0xFF)
{
sfp->Read(&t1,sizeof(char))
len++
if(t1==0xD9)
break
else
nf.Write(&t1,sizeof(char))
}
}
nf.Close()
}
调用:
void test()
{
CFile fp
fp.Open("86b05621.jpg",CFile::modeRead|CFile::typeBinary)//文件名改一下
unsigned char a=0,b=0
len=0
while(1)
{
fp.Read(&a,sizeof(char))
len++
if(len>=fp.GetLength())
break
if(a==0xFF)
{
fp.Read(&b,sizeof(char))
len++
if(b==0xD8)
{
filesn++
char filename[256]
sprintf(filename,"Jpg %d.jpg",filesn)
ReadJpg(&fp,filename,a,b)
}
}
}
fp.Close()
}
思路是,先得到FF的值,然后再判断下一位是否是0xD8, 但这里要说明一下,如果你的其它数据信息里也含有FF D8值的话就会出错了, 所以为保险起见,应该再多比较几位, JPG的头是固定的,再往下就是EF E0 00 1E, 建议楼主再往下比较四位比较保险(在程序中稍作修改即可)
你是不是在 分析某个 游戏的或程序的资源文件呀,如果是的话,这个资源文件应该配有一个 索引文件!或在其文件自身。索引可以列表索引,链表形示……
如果是你自已生成的文件包,最好加上索引,因为这样可以提高效率!
可以直接读取的按照二进制文件
也就是"rb"方式打开就可以了
不过
读取后,这个是乱的,没法直接显示。
需要自己写解码程序,或者调用对应jpeg库
转成bitmap才可以显示的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)