防止重新创建或覆盖文件

时间:2014-07-31 17:24:06

标签: c

数据应存储在文件中,但是当我重新启动程序时,它们就会消失,文件大小也会恢复为0.

到目前为止,我想出了什么:

 if (!fp) {
    fp=fopen("data.txt", "wb");
  }

但它不起作用。

谢谢!

5 个答案:

答案 0 :(得分:5)

让我们看一下fopen()的文档:

The table from cppreference

我们可以忽略b中的wb,因为它只会让事情以二进制模式运行。

如果我们查看w的描述,我们可以看到它说它会破坏具有相同名称的现有文件的内容。这就是你所看到的行为。

而不是那样,您可能想要使用rb+abrb+变体将现有数据保留在文件中,并将打开文件中的位置设置为指向开头。另外。你可以使用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