在linux中使用c ++强制删除文件

时间:2013-03-08 11:40:34

标签: c++ linux file

我在linux服务器上运行c ++代码。在代码中,我使用函数unlink(filename)来删除文件。由代码本身生成的临时文件将被成功删除。但是我手动放的文件,我的代码无法删除它们。可能是什么原因?

2 个答案:

答案 0 :(得分:9)

试试这个:

#include <errno.h>
#include <string.h>

...

if (unlink(filename) == -1) {
    fprintf(stderr, "File '%s' unlink error (%d): %s\n", filename, errno, strerror(errno));
    // or just use perror("unlink") for less customizable error message
    // note: calling other functions before printing may change errno value
}

产生的错误消息应显示问题所在。

此处errno man pageunlink man page将告知可以返回的错误。


嗯,因为这实际上是一个C ++问题,你可以而且可能应该用fprintf替换std::cerr,但在这种情况下,可能首先需要{ {1}}并使用它,以避免iostream在检查之前弄乱它。

如果你想明确它是顶级命名空间中的符号,你也可以写int errtmp = errno,至少有些人认为即使没有必要也可以采用这种方法。

答案 1 :(得分:1)

例如rm -f的工作方式是,如果文件具有不允许删除的保护,它会尝试使用chmod()chown()更改文件保护和所有权。 root的功能是“可以删除文件”。如果用户是chmod()或文件实际属于运行该程序的用户,那么这实际上是值得保证的。

请注意,这取决于系统,您无法以适用于Windows和类Unix操作系统的方式编写更改文件权限等的代码,如果您想在Symbian OS上执行此操作,则需要将是关于如何做到的第三个变体尽管在某些情况下可能存在“Posix兼容”{{1}}。