在linux上强制删除一个使用C++的文件
我在linux服务器上运行C++的代码。在代码中,我使用功能unlink(filename)
来删除文件。由代码本身生成的临时文件正在成功删除。但是我手动放入的文件,我的代码无法删除它们。可能是什么原因?在linux上强制删除一个使用C++的文件
试试这个:
#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++的问题,你可以和可能应std::cerr
取代fprintf
,但在这种情况下,它可能有必要先做int errtmp = errno
和使用,为避免的iostream搞乱它在它被检查之前。
如果您想明确表示它是*命名空间中的符号,那么您至少也可以编写::unlink(filename)
,至少有些人甚至在没有必要时也会考虑这种良好实践。
,对于例如rm -f
作品中,如果文件中有保护,不允许删除它,它会尝试更改文件保护和所有权,使用chmod()
和chown()
功能,“有可能的方式删除文件“。如果用户是root
或者文件实际上属于运行程序的用户,那么这只能保证能够正常工作。
请注意,这会变得与系统有关,您无法编写更改文件权限等的代码,这种代码可以在Windows和类Unix操作系统上运行,如果您想要这样做,比如说Symbian OS,这将是如何做到的第三个变体。尽管在某些情况下可能会出现“Posix兼容”chmod()
。
'rm -f'不会尝试更改权限;它只是压制一些提示和错误报告。但是,C++ 17提供了'std :: filesystem'(基于Boost,natch),可以让你操纵权限。 – 2017-10-04 07:07:14
“我的代码无法删除它们” - 当您列出目录内容时是否还能看到文件名?或者你是否仅仅观察到光盘空间仍然被分配而不被回收? – 2013-03-08 11:42:30
我不熟悉那个函数,但它可能是文件权限的问题。 – SamGamgee 2013-03-08 11:43:12
@安德里亚斯:是的。即使在执行代码后,这些文件仍然存在。 – sajal 2013-03-08 11:47:23