char buf [10] = {10,10,10,10,10,10,10,10,10,10};
FILE * fp = fopen(“ c: \\ test.dat”fopen wb 权限,“ w”);
fwrite(buffopen wb 权限,1,10,fp);
fclose(fp);
FILE * fp1 = fopen(“ c: \\ test1.dat”,“ wb”);
fwrite(buf,1,10,fp);
fclose(fp1);
我们注意到程序的第一段定义了一个数组,每个组成部分的值均为10,等效的十六进制为0A.
在第二段中,首先打开文件test.dat进行写入,然后将10个数据写入该文件,最后关闭该文件.
第三段具有相似的功能,除了文件名更改为test1.dat,并将打开文件的模式更改为wb.
第二段和第三段有什么区别?让我们看一下最终文件的内容:
测试日期: 0D 0A 0D 0A 0D 0A 0D 0A 0D 0A 0D 0A 0D 0A 0D 0A 0D 0A 0D 0A
test1.dat: 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A
为什么?这是w和wb之间的差异. W以文本模式打开文件,wb以二进制模式打开文件. 在文本模式下打开文件时,只要fwrite函数遇到0x0A,它就会在文件前面添加0x0D. 其他内容不执行添加操作.
r要以只读方式打开文件,该文件必须存在.
r +该文件必须处于打开状态才能进行读取和写入. 该文件必须存在.
rb +读写打开一个二进制文件. 仅允许读写数据.
rt +读写打开一个文本文件,允许读写.
w打开一个只写文件. 如果文件存在,则将文件长度清除为0,即文件内容将消失. 如果文件不存在,请创建它.
w +打开一个可读可写的文件. 如果文件存在,则将文件长度清除为零,即文件内容将消失. 如果文件不存在,请创建它.
a使用其他方式打开只写文件. 如果文件不存在,将创建它. 如果文件存在,则写入的数据将被添加到文件的末尾,即,文件的原始内容将被保留. (保留EOF字符)
a +打开一个可读可写的文件作为附件. 如果文件不存在,将创建它. 如果文件存在,则写入的数据将被添加到文件的末尾,即,文件的原始内容将被保留. (不保留原始EOF字符)
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值.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-157592-1.html