我在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
- 1. 如何强制删除一个文件
- 2. 如何在Linux上使用C++关闭文件时删除文件?
- 3. 如何强制删除C/C++中的锁定文件?
- 4. 在C中删除一个文件#
- 5. git push - 强制删除远程文件?
- 6. 如何使用exec在Linux上删除文件
- 7. 如何使用PowerShell强制删除打开的文件
- 8. 如何使用bash在Linux上的多个文件中删除多行
- 9. 在Linux中删除多个文件的名称的一部分
- 10. 删除一个文件树,如果它已满C使用C
- 11. 删除文件强制即使它正在被其他进程
- 12. 使用C#在asp.net中删除文件?
- 13. 强制HTTPS并删除CodeIgniter上的index.php
- 14. 使用C#删除超过一个月大的文件
- 15. 在C++中删除LINUX文本文件中的行
- 16. 使用c删除文件夹后删除文件夹#
- 17. 强制删除文件夹中的所有文件
- 18. C++ linux控制台清除屏幕上的一个区域
- 19. 使用c删除ntfs中的文件
- 20. 强制限制删除
- 21. Linux中的强制文件编码
- 22. 使用多个文件上传时删除单个文件Carrierwave
- 23. 强制参数不再起作用的文件夹删除
- 24. 使用GrifFsTemplate.delete删除GridFS上的文件
- 25. 如何在单个文件上强制使用HTTPS? (PHP)
- 26. 删除Linux程序集中的一个文件x86
- 27. Codeigniter两个文件上传,一个强制和一个可选
- 28. 从文本文件在linux删除文件整个线用2柱,用1柱
- 29. 在linux上删除包含子文件夹和文件的文件夹
- 30. 强制一个Linux程序从另一个位置读取的libc库文件
“我的代码无法删除它们” - 当您列出目录内容时是否还能看到文件名?或者你是否仅仅观察到光盘空间仍然被分配而不被回收? – 2013-03-08 11:42:30
我不熟悉那个函数,但它可能是文件权限的问题。 – SamGamgee 2013-03-08 11:43:12
@安德里亚斯:是的。即使在执行代码后,这些文件仍然存在。 – sajal 2013-03-08 11:47:23