我想看看文件是否存在。如果它不存在,那么我想创建它。我顺便使用Linux。
答案 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
将其移到旧文件上。