如果二进制文件a.dat已经存在,现在要求写入全新数据,应以“wb”方式打开,具体代码如下:
FILE *fp;
fp=fopen(“a.dat”,“wb”);
就会将原来的文件内容全删除,写全新的数据。
在windows上,用记事本就可以打开文本文件了,但要打开二进制文件需要对应的二进制文件解码器,因此,文本文件是更为大家所熟知的文件形式,而二进制文件的优点在于它的输入输出都省去了转换的过程,而且更省空间。
扩展资料:
二进制文件读写 *** 作方法:
1、二进制文件 *** 作
rb - 读的时候获取到的是二进制数据(bytes)
wb - 写的时候写入的内容要求类型是二进制文件
普通的文本文件可以通过二进制的形式去打开,影响只是获取到的内容,和写进去的内容的数据类型;二进制文件只能以二进制的形式打开 (例如: 图片、视频、音频等)
2、二进制数据
一般二进制数据都是通过网络请求获取到,或者通过读取本地的二进制文件来取到
(1)将字符串转换二进制
bytes(字符串, 编码方式)
字符串.encode(编码方式)
(2)将二进制转换成字符串
str(二进制数据, 编码方式)
二进制数据.decode(编码方式)
#include <stdio.h>#include <stdlib.h>int main(){FILE *fp int buf[10] int i for(i = 0i <10i++)buf[i] = i fp = fopen("test", "wb")//二进制打开文件testfwrite(buf, sizeof(int), 10, fp)//将buf写入testfclose(fp) fp = fopen("test", "rb") fread(buf, sizeof(int), 10, fp) fclose(fp) if(remove("test"))perror("error:") fp = fopen("test", "wb") fwrite(buf+4, sizeof(int), 6, fp)//删除前4个int型数字return 0}二进制文件和文本文件最终存储的结构是一样的,都是二进制码存储,只不过文本文件读写的时候解码方式是ASCII(把二进制码转换为ASCII码),二进制文件直接使用二进制码。把一个文本文件读入内存时,要将ASCII码转换成二进制码, 而把文件以文本方式写入磁盘时,也要把二进制码转换成ASCII码。对二进制文件的读写不存在这种转换。
c *** 作二进制文件用数据块读写函数:freed和fwrite,而打开文件的使用需要设置二进制读或写。
文本读打开文件fp = fopen ("test", “r”)
二进制读打开文件fp = fopen("test","rb")b就是binary二进制的意思。
参数还有写的w 或wb,添加a,ab等等(具体可查看函数但一般常用就这几个了)。
要将文件数据前移,覆盖待删除的记录,首先要将数据读入,删除,再写入。
重新设置文件结束点:没有文件结束点这个概念,不管什么文件,判断文件是否读取结束时,是根据读入的长度与文件的长度(每个文件存储在磁盘时都有记录文件长度)比较得到。(feof函数实现就是这样)。你将数据写入后, *** 作系统会自动修改文件长度的。
快速读取二进制文件的方法如下: 1、打开文件。 打开文件可以有两种方式,第一种可以使用fstream类的构造函数。fstream file("test.dat",ios_base::in|ios_base::out|ios_base::app)另外一种方法就是使用 open函数。fstream filefile.open("test.dat",ios_base::in|ios_base::out|ios_base::app)这样就可以打开一个可读写的文件了。如果文件不存在的话,就会创建一个新文件并且以读写方式打开。这里需要说明一点,如果文件不存在的话,open函数中第二个参数必须包含ios_base::out|ios_base::app,否则就不能正确创建文件。 2、写文件。 先进性写文件的 *** 作否则读一个空文件是没有意义的。 既然是写二进制文件可以向文件中写入一个整形值。写二进制字符只能使用write 函数。但是write函数的原形是write(const char * ch, int size)。第一个参数是char * 类型,所以需要把将要写入文件的int类型转换成char *类型。这里的转换困扰了我好几天,不过终于弄明白了。代码如下。int tempfile.write((char *)(&temp),sizeof(temp))3、读文件。 可以写文件了,读文件就好办多了。读文件需要用到read函数。其参数和write 大致相同,read(const char * ch, int size)。要把内容读到int类型变量中同样涉及到一个类型转换的问题。和写文件一样。int readIntfile.read((char(&readInt),sizeof(readInt))这样文件中的int值就读入到int型变量 readInt中了。 4、文件指针。 在文件的读写过程中往往需要对文件进行选择性读取。所以需要进行文件指针的移动。这是需要用到seekg和seekp函数。在fstream类中有两个文件指针,一个是读取文件的指针 ,一个是写文件的指针分别用tellg和tellp文件来取得指针的位置。同样seekg和seekp两个函数分别是对这两个指针进行移动的函数。这两个函数的参数都是一样的。先对几个枚举类型进行一下说明: ios_base::beg ——文件开始位置ios_base::cur ——文件当前位置ios_base::end ——文件末尾位置下面以seekg为例说明一下指针移动的方法:file.seekg(3) ——指针移动到第三个字符的位置file.seekg(ios_base::beg) ——指针移动到文件开头file.seekg(ios_base::end) ——指针移动到文件末尾file.seekg(-3,ios_base::cur) —— 指针当前位置向前移动三个字符file.seekg(3,ios_base::cur) ——指针当前位置向后移动三个字符file.seekg(3,file.tellg()) ——指针当前位置向后移动三个字符file.seekg(file.tellg()+3) ——指针当前位置向后移动三个字符 5、对文件 *** 作完毕后别忘了关闭文件。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)