如何在创建文件之前测试文件是否存在

时间:2011-10-22 22:51:23

标签: c++ linux file

我想看看文件是否存在。如果它不存在,那么我想创建它。我顺便使用Linux。

1 个答案:

答案 0 :(得分:17)

你不能可靠地做到这一点。在您检查文件是否存在以及何时创建文件之间,可以创建另一个进程。

您应该继续创建文件。根据您尝试做的更大的事情,如果文件已经存在,您可能需要其中一个选项来执行操作:

  • 修改之前的内容:open("file", O_RDWR|O_CREAT, 0666)
  • 删除之前的内容:open("file", O_WRONLY|O_CREAT|O_TRUNC, 0666
  • 附加到上一内容:open("file", O_WRONLY|O_CREAT|O_APPEND, 0666)
  • 操作失败:open("file", O_WRONLY|O_CREAT|O_EXCL, 0666)

其中大多数,但不幸的是并非所有这些都具有更高级iostream接口的等价物。可能还有一种方法可以将iostream包装在从open获取的文件描述符周围,具体取决于您拥有的C ++库。

另外,我应该提一下,如果你想原子地替换文件的内容(所以没有进程看到一个不完整的文件),唯一的方法是写出新的内容到文件,然后使用rename将其移到旧文件上。