永发信息网

C语言,文件写入数据后读出时里面数据清空了。

答案:3  悬赏:20  手机版
解决时间 2021-03-26 20:19
  • 提问者网友:姑娘长的好罪过
  • 2021-03-25 22:06
C语言,文件写入数据后读出时里面数据清空了。
最佳答案
  • 五星知识达人网友:独行浪子会拥风
  • 2021-03-25 22:14
如果你想在已存在的txt内追加内容的话,应该使用a而非w。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)

各mode如下:
FILE * fopen(const char * path,const char * mode);
mode有下列几种形态字符串:
r 以只读方式打开文件,该文件必须存在。
r+ 以可读写方式打开文件,该文件必须存在。
rb+ 读写打开一个二进制文件,允许读写数据,文件必须存在。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
wb 只写打开或新建一个二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
wx 创建文本文件,只允许写入数据.[C11]
wbx 创建一个二进制文件,只允许写入数据.[C11]
w+x 创建一个文本文件,允许读写.[C11]
wb+x 创建一个二进制文件,允许读写.[C11]
w+bx 和"wb+x"相同[C11]
以x结尾的模式为独占模式,文件已存在或者无法创建(一般是路径不正确)都会导致fopen失败.文件以操作系统支持的独占模式打开.[C11]
上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库以二进制模式打开文件。如果不加b,表示默认加了t,即rt,wt,其中t表示以文本模式打开文件。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask值。
全部回答
  • 1楼网友:人類模型
  • 2021-03-25 23:35
代码贴出来看看追问

追答检查你的写入和读取文件的模式wb+,二进制格式。追问wb+有问题吗,我不是很懂,我刚才改成wt+,也还是不行。追答b = binary,是二进制格式的。
另外,可以对代码进行调试,打断点。
再者,这两个功能可以写在一个.c文件里,使用同一个main函数,方便调试。
提示:w(b)+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。所以,对于w,你要搞清楚追问这样啊。我是想将商品的信息存入这个文件,然后在另一个程序之中调用这些信息。就是要作为另一个程序一开始就存在的部分,不是要在程序中输入。要怎么修改才行啊。。追答提示得很清晰了。不要用w模式,如果你希望使用二进制读写文件的话,建议你用b+,而不是wb+
  • 2楼网友:玩家
  • 2021-03-25 22:24
你的代码呢?打开方式不对,是不是用的w或者w+
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯