㈠ c语言二进制文件操作
你写进去的是文本啊,文本的二进制形式也是可读的,你写一点int啊double啊你就知道二进制和文本的写入区别了。
㈡ c语言读取二进制数据文件
1、二进制文本使用fopen函数的二进制模式“rb”就可以打开。对于程序来说,不管后缀名如何,文件分为两种类型:文本文件和二进制文件。 C语言里有一系列文件操作函数。区分文本和二进制文件,需要在打开文件时设置不同的控制符mode的变量即可。
2、fopen的函数原型:FILE * fopen(const char * path,const char * mode);
fopen函数的第一个参数是文件路径,第二个参数是打开方式,有以下几种方式:
r 以只读方式打开文件,该文件必须存在。
r+ 以可读写方式打开文件,该文件必须存在。
rb+ 读写打开一个二进制文件,允许读数据。
rw+ 读写打开一个文本文件,允许读和写。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
wb 只写打开或新建一个二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
wt+ 读写打开或着建立一个文本文件;允许读写。
at+ 读写打开一个文本文件,允许读或在文本末追加数据。
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。
3、例程:
#include <stdlib.h>
#include <stdio.h>
int main ()
{
FILE * fpPhoto, * fpText, * fpTarget ;
int iRead ;
char szBuf[100] ;
printf ("请输入第一个文件名(jpg):\n") ;
gets (szBuf) ;
fpPhoto = fopen (szBuf, "rb") ;
printf ("请输入第二个文件名(txt):\n") ;
gets (szBuf) ;
fpText = fopen (szBuf, "rb") ;
printf ("请输入目的文件名(jpg):\n") ;
gets (szBuf) ;
fpTarget = fopen (szBuf, "wb") ;
if (!fpPhoto || !fpText || !fpTarget)
{
printf ("打开文件失败!\n") ;
system("pause") ;
return -1 ;
}
while ((iRead = fread (szBuf, 1, sizeof (szBuf), fpPhoto)) > 0)
fwrite (szBuf, 1, iRead, fpTarget) ;
while ((iRead = fread (szBuf, 1, sizeof (szBuf), fpText)) > 0)
fwrite (szBuf, 1, iRead, fpTarget) ;
fclose (fpPhoto) ;
fclose (fpText) ;
fclose (fpTarget) ;
return 0 ;
}
㈢ 怎么用c语言解析二进制文件
//ver:1
//resv1:0
//signature:CUC
//type:69
//no:5
//resv2:0
//seq:4
//length:56
//int2,1
//int2,2
//int1,1
//int4,30
//int1,1
//int1,7
//str,beijing
//int2,1
//int2,4
//int1,1
//int4,60
//int1,1
//int1,7
//str,tianjin
//int4,80
//二进制文件b.bin是:
//00000000h:
//00000010h:
//00000020h:
//00000030h:6E6A696E00000050
#pragmacomment(lib,"ws2_32")
#include<stdio.h>
#include<winsock2.h>
#pragmapack(push,1)
struct_D{
charver;
//charresv1;
charsignature[3];
chartype;
shortno;
charresv2;
intseq;
intlength;
shortint2_0;
shortint2_1;
charint1_0;
intint4_0;
charint1_1;
charint1_2;
charstr_0[7];
shortint2_2;
shortint2_3;
charint1_3;
intint4_1;
charint1_4;
charint1_5;
charstr_1[7];
intint4_2;
}d;
#pragmapack(pop)
FILE*f;
intmain(){
f=fopen("b.bin","rb");
if(NULL==f){
printf("Cannotopenfileb.bin! ");
return1;
}
fread(&d,sizeof(struct_D),1,f);
fclose(f);
printf("ver:%d ",d.ver);
printf("resv1:0 ");
printf("signature:%.3s ",d.signature);
printf("type:%d ",d.type);
printf("no:%hd ",ntohs(d.no));
printf("resv2:%d ",d.resv2);
printf("seq:%d ",ntohl(d.seq));
printf("length:%d ",ntohl(d.length));
printf("int2_0:%hd ",ntohs(d.int2_0));
printf("int2_1:%hd ",ntohs(d.int2_1));
printf("int1_0:%d ",d.int1_0);
printf("int4_0:%d ",ntohl(d.int4_0));
printf("int1_1:%d ",d.int1_1);
printf("int1_2:%d ",d.int1_2);
printf("str_0:%.7s ",d.str_0);
printf("int2_2:%hd ",ntohs(d.int2_2));
printf("int2_3:%hd ",ntohs(d.int2_3));
printf("int1_3:%d ",d.int1_3);
printf("int4_1:%d ",ntohl(d.int4_1));
printf("int1_4:%d ",d.int1_4);
printf("int1_5:%d ",d.int1_5);
printf("str_1:%.7s ",d.str_1);
printf("int4_2:%d ",ntohl(d.int4_2));
return0;
}
//ver:1
//resv1:0
//signature:CUC
//type:69
//no:5
//resv2:0
//seq:4
//length:56
//int2_0:1
//int2_1:2
//int1_0:1
//int4_0:30
//int1_1:1
//int1_2:7
//str_0:beijing
//int2_2:1
//int2_3:4
//int1_3:1
//int4_1:60
//int1_4:1
//int1_5:7
//str_1:tianjin
//int4_2:80
//
代码示例
㈣ C语言 访存二进制文件定位问题
1.打开模式要用r+(对于ASCII文件)或者rb+(对于二进制文件)
2.fseek()函数有三个参数,第一个是文件指针,第二个是偏移量,第三个是起始位置,第三个参数有三个可选项,分别是SEEK_SET(文件开头),SEEK_CUR(当前位置),SEEK_END(文件结尾),feek()函数的作用就是将文件指针指向的文件读写位置设置为从起始位置起移动第二个参数表示的偏移量个字节的位置,第二个参数可以是负数,表示向前移动。
3.你所说的情况,应该用fgetpos()函数和fsetpos()函数设置读写位置。请自行上网查找这两个函数的使用说明。
㈤ C语言文本文件与二进制文件问题
这些都是C语言打开文件函数fopen的一个参数打开文件方式的值:
定义函数 FILE * fopen(const char * path,const char * mode);
函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。
mode有下列几种形态字符串:
r 打开只读文件,该文件必须存在。
r+ 打开可读写的文件,该文件必须存在。
rb+ 读写打开一个二进制文件,只允许读写数据。
rt+ 读写打开一个文本文件,允许读和写。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
wb 只写打开或新建一个二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
wt+ 读写打开或着建立一个文本文件;允许读写。
at+ 读写打开一个文本文件,允许读或在文本末追加数据。
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在POSIX系统,包含Linux都会忽略该字符。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask 值。
自己看吧
㈥ C语言二进制文件的读取问题
C语言中二进制文件的读取要用fread和fwrite来实现。
fwrite()与fprintf()是不同的。
fwrite将写入的数据作为文件的磁盘内容保存。fprintf将写入的数据的每个字符所对应的ASCII码作为文件的磁盘内容保存。fprintf做了一个转换的工作。
当打开文件时,记事本会自动把文件的磁盘内容作为ASCII码转换成对应的字符,然后再显示出来,即显示的是文本内容而不是磁盘内容。
例如,用fwrite向文件写入“65”时,文件的磁盘内容就是保存的65(磁盘上以二进制表示)。当用记事本打开文件时,记事本会读到65,并把65看作一个ASCII码,再把对应的字符“A”显示出来。因此屏幕上看到的文本内容是“A”。
而用fprintf向文件写入“65”时,文件的磁盘内容保存的是“6”和“5”这两个字符对应的ASCII码,分别是54和53。因此文件的磁盘内容是54和53。当用记事本打开文件时,记事本读到54,就显示出对应的“6”。再读到53,就显示出对应的“5”。
㈦ c语言怎么用二进制方式读取文件
C语言中二进制文件的读取要用fread和fwrite来实现。 fwrite()与fprintf()是不同的。 fwrite将写入的数据作为文件的磁盘内容保存。fprintf将写入的数据的每个字符所对应的ASCII码作为文件的磁盘内容保存。fprintf做了一个转换的工作。
㈧ C语言中二进制文件中如何查找字符串,有具体函数么
二进制文件中哪有字符串这个概念?
补充:
可以用fseek移动指针位置,然后继续读取,原型如下
int fseek(FILE *stream, long offset, int fromwhere);