数据应存储在文件中,但是当我重新启动程序时,它们就会消失,文件大小也会恢复为0.
到目前为止,我想出了什么:
if (!fp) {
fp=fopen("data.txt", "wb");
}
但它不起作用。
谢谢!
答案 0 :(得分:5)
让我们看一下fopen()
的文档:
我们可以忽略b
中的wb
,因为它只会让事情以二进制模式运行。
如果我们查看w
的描述,我们可以看到它说它会破坏具有相同名称的现有文件的内容。这就是你所看到的行为。
而不是那样,您可能想要使用rb+
或ab
。 rb+
变体将现有数据保留在文件中,并将打开文件中的位置设置为指向开头。另外。你可以使用ab
来设置文件中的位置到最后。
答案 1 :(得分:1)
见http://man7.org/linux/man-pages/man3/fopen.3.html
如果您将w
作为模式传递给fopen
,则文件大小将被截断为0.因此,每次运行程序时,正在打开的文件都将丢失您所拥有的所有数据写在先前执行的程序上。请改用a
模式。 a
模式代表"追加" - 它允许您在文件末尾写入数据。如果文件不存在,它将创建它。
答案 2 :(得分:0)
当您的程序运行时,它会覆盖现有文件。尝试使用
fp=fopen("data.txt", "ab");
答案 3 :(得分:0)
取决于您要使用该文件的内容。也许您可以查看打开文件的附加模式。
答案 4 :(得分:0)
您需要更改模式。
" W"创建一个用于写入的空文件。如果已存在具有相同名称的文件,则其内容将被删除,并且该文件将被视为新的空文件。
http://www.tutorialspoint.com/c_standard_library/c_function_fopen.htm