【问题标题】:Remove file in C++ under UNIXUNIX下C++中删除文件
【发布时间】:2009-03-24 17:05:56
【问题描述】:

你们通常如何在 Linux 操作系统上删除文件?我正在考虑使用 unlink 函数调用,但我想知道您是否有更好的主意,因为 C++ 标准没有提及文件删除操作,并且它取决于系统。

【问题讨论】:

    标签: c++ unix file-io posix


    【解决方案1】:

    是的——C++ 标准把这些东西留给了操作系统,所以如果你在 Linux(或任何 POSIX 系统)上,unlink() 就是你所拥有的。

    C 标准提供remove(),您可以尝试,但请记住,它的behavior is unspecified 用于“常规文件”以外的任何内容,因此它并不能真正保护您免于进入特定于平台的文件系统详细信息(链接等)。

    如果您想要更高级别、更健壮和更便携的东西,请查看Boost Filesystem

    【讨论】:

    • 我在所有代码中都使用 remove() - 可移植性对我们中的某些人很重要。
    • remove 实际上在 POSIX 中被指定为等同于非目录的 unlink。
    【解决方案2】:

    标准包括一个名为remove 的函数,它可以做到这一点。虽然我更喜欢boost.filesystem(如果我已经使用了 boost)。

    #include <cstdio>
    
    int main() {
        std::remove("/home/js/file.txt");
    }
    

    【讨论】:

      【解决方案3】:

      unlink()POSIX 标准定义,因此将存在于任何与 POSIX 兼容的系统上,也存在于许多不兼容 POSIX 的系统上。

      【讨论】:

        【解决方案4】:

        取消链接是正确的做法。

        【讨论】:

          【解决方案5】:

          请注意,最近的内核也提供unlinkat。如果目录本身有文件描述符,则此函数比unlink 更快。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-10-29
            • 2012-06-02
            • 1970-01-01
            • 2016-11-25
            • 2012-01-31
            • 2017-01-25
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多