我有一个在 linux 服务器上运行的 c++ 代码。在代码中,我使用函数unlink(filename)
来删除文件。由代码本身生成的临时文件已成功删除。但是我手动放置的文件,我的代码无法删除它们。可能是什么原因?
问问题
1160 次
2 回答
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 手册页,unlink 手册页将告诉它可以返回哪些错误。
嗯,因为这实际上是一个 C++ 问题,您可以并且可能应该替换fprintf
为std::cerr
,但在这种情况下,可能有必要先这样做int errtmp = errno
并使用它,以避免 iostream 在它被检查之前弄乱它。
::unlink(filename)
如果您想明确表示它是顶级名称空间中的一个符号,您也可以编写,至少有些人认为即使在不必要的情况下也是如此。
于 2013-03-08T11:45:37.067 回答
1
例如,rm -f
工作方式是,如果文件具有不允许删除的保护,它会尝试更改文件保护和所有权,使用chmod()
和chown()
函数“使删除文件成为可能”。只有当用户是root
或文件实际上属于运行程序的用户时,这才真正保证工作。
请注意,这取决于系统,您不能编写更改文件权限等的代码,以在 Windows 和类 Unix 操作系统上都可以使用,如果您想在 Symbian OS 上执行此操作,那将是一个关于如何做的第三个变体虽然chmod()
在某些情况下可能有“Posix compatible”可用。
于 2013-03-08T13:19:00.250 回答