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

Ste*_*ris 5 c++ linux file

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

zwo*_*wol 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接口的等价物.open根据您拥有的C++库,可能还有一种方法可以将iostream包装在您获取的文件描述符周围.

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