如何在创建文件之前测试文件是否存在
How to test if a file exists before creating it
我想看看文件是否存在。如果它不存在,那么我想创建它。顺便说一下,我用的是Linux。
你不能可靠地做到这一点。在检查文件是否存在和创建文件之间,可能会有另一个进程创建它。
您应该继续创建文件。根据您尝试做的更大的事情,如果文件已经存在,您可能希望使用以下选项之一来执行操作:
- 修改之前的内容:
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
将其移动到旧文件上。
相关文章:
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 为测试目标创建具有不同源文件夹的文件
- 更正 CMakeList.txt 用于谷歌测试的文件?
- MinGw 无法从 cmake 编译测试文件
- clang 的 libFuzzer 可以在同一二进制文件中测试超过 1 个 API 吗?
- C++ gmock - 我们如何在单元测试 cpp 文件中读取/获取 cpp 文件函数的参数值
- CMake GoogleTests在我的测试文件中找不到导入的头文件
- 为什么使用_access时只读测试对读写文件有效
- 使用gtest时,在头文件中而不是.cpp文件中具有可测试类的利弊
- 链接CPP文件进行测试时发生LNK2019错误
- 谷歌测试可执行文件中的单元测试未被vstest选中
- 使用 ctest 的每个测试都需要单独的文件吗?
- 在单元测试项目中包括 .c 文件,并从多个 cpp 文件访问它而不会出现链接问题
- 谷歌测试读写同一文件失败
- 为多个测试文件构建可执行文件
- Centos6 gcc6:编译简单的 c++11 测试文件时,默认的 ABI 不拾取
- 为什么生成文件返回 g++: 错误: h 文件或目录 make: *** [生成文件:12: 测试] 错误 1?
- Bazel:如何在测试前运行py_binary以生成输入文件
- 将我的主输出库与测试可执行文件链接时出现问题
- Visual Studio单元使用具有相对路径的文件测试