今天遇到的是一个fwrite写入数据失败的问题,这个问题已经遇到好几次了,在此特别记录一下。
问题是出在fopen的打开权限上。重温一下fopen的打开权限
r:以只读方式打开文件,这意味着你对这个文件指针只能是fread操作,文件指针指向开头。
r+:以读写方式打开文件。文件指向开头
注意:以上方式,文件必须存在,不然报错。
w:以只写的方式打开文件,如果文件存在,则将文件中的内容清除掉。文件指针指向开头
w+:以读写的方式打开文件,文件存在,内容截断,
注意:以上方式,文件不存在则创建
a:以追加的方式打开文件,没有则创建,指针指向文件末尾。只能write
a+:以追加的方式打开文件,但是能够随意的fread和fwite
b:以二进制的方式打开文件,这个常用在跨文件系统的时候使用,不加这个参数会将一些特别的字符进行改变,比如windows和linux的换行符的区别,加这个参数可以避免特殊字符的强制转换。
说一下fopen、fread、fwrite之间的配合使用。
一定程度上,从fopen函数开始就决定了后面两个函数的使用规则。
1、当fopen使用wb+时,使用fread就一定会读不到数据,只能先fwrite之后再fread。当我们只想更新文件里的某些信息时,这种操作就显得很傻逼。
2、当fopen使用rb+时,这中操作能将文件中的数据读出来,但是fwrite的时候又会出现问题,因为文件的内容没用被清除掉,即使使用fseek定位到文件开头,也只是覆盖文件内容而已。但文件中原本的内容长度大于要写的内容长度时,后面总是会又多余数据。
所以只能先rb+把数据读数来,fclose文件,更新部分数据,再wb+,再fwrite写入文件,最后fclose。只能说有点麻烦而已。