【发布时间】:2009-03-24 17:05:56
【问题描述】:
你们通常如何在 Linux 操作系统上删除文件?我正在考虑使用 unlink 函数调用,但我想知道您是否有更好的主意,因为 C++ 标准没有提及文件删除操作,并且它取决于系统。
【问题讨论】:
你们通常如何在 Linux 操作系统上删除文件?我正在考虑使用 unlink 函数调用,但我想知道您是否有更好的主意,因为 C++ 标准没有提及文件删除操作,并且它取决于系统。
【问题讨论】:
是的——C++ 标准把这些东西留给了操作系统,所以如果你在 Linux(或任何 POSIX 系统)上,unlink() 就是你所拥有的。
C 标准提供remove(),您可以尝试,但请记住,它的behavior is unspecified 用于“常规文件”以外的任何内容,因此它并不能真正保护您免于进入特定于平台的文件系统详细信息(链接等)。
如果您想要更高级别、更健壮和更便携的东西,请查看Boost Filesystem。
【讨论】:
标准包括一个名为remove 的函数,它可以做到这一点。虽然我更喜欢boost.filesystem(如果我已经使用了 boost)。
#include <cstdio>
int main() {
std::remove("/home/js/file.txt");
}
【讨论】:
unlink() 由POSIX 标准定义,因此将存在于任何与 POSIX 兼容的系统上,也存在于许多不兼容 POSIX 的系统上。
【讨论】:
取消链接是正确的做法。
【讨论】:
请注意,最近的内核也提供unlinkat。如果目录本身有文件描述符,则此函数比unlink 更快。
【讨论】: