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