如何在不打开文件的情况下使用 boost 文件系统创建文件

How do I create a file with boost filesystem without opening it

在 boost 文件系统中有一个函数 create_directory 可以创建一个目录。如何创建文件?我可以通过定义一个 boost::filesystem::ofstream 对象来创建一个,但这也会打开文件,所以我必须先调用 close 才能对其进行其他操作,例如重命名或删除。这是唯一的方法吗?

Boost Filesystem V3 不提供 touch(1) 功能;

即使touch也会创建+关闭一个文件,看看strace的输出:

open("/tmp/q", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 47
dup2(47, 0)                             = 0
close(47)                               = 0
utimensat(0, NULL, NULL, 0)             = 0

我认为你最合理的选择是创建一个关闭文件的包装函数。

你可以只使用像

这样的东西
    // ... code ...
    boost::filesystem::ofstream( "/path/to/file" );
    boost::filesystem::rename( "/path/to/file", "/path/to/renamed_file" );
    // ... code ...

这将创建一个空文件并立即重命名,无需在任何时候关闭它。