linux下使用c++强制删除文件
Forcefully deleting a file using c++ in linux
我有一个在linux服务器上运行的c++代码。在代码中,我使用函数unlink(filename)
来删除文件。由代码本身生成的临时文件被成功删除。但是我手动放置的文件,我的代码无法删除它们。原因是什么呢?
试试这个:
#include <errno.h>
#include <string.h>
…
if (unlink(filename) == -1) {
fprintf(stderr, "File '%s' unlink error (%d): %sn", 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++问题,你可以而且可能应该用std::cerr
代替fprintf
,但在这种情况下,可能有必要先做int errtmp = errno
并使用它,以避免iostream在检查之前把它弄乱。
也可以写::unlink(filename)
,如果你想明确它是顶级命名空间中的一个符号,至少有些人认为这是一个很好的实践,即使没有必要。
例如rm -f
的工作方式是,如果文件具有不允许删除的保护,它会尝试更改文件的保护和所有权,使用chmod()
和chown()
函数"使删除文件成为可能"。只有当用户是root
或者文件实际上属于运行该程序的用户时,这才真正保证起作用。
请注意,这是系统依赖的,你不能写代码来改变文件的特权等工作在Windows和类unix操作系统,如果你想这样做,说,Symbian操作系统,它将是第三种变体如何做到这一点,尽管可能有一个"Posix兼容"的chmod()
在某些情况下可用。
相关文章:
- 如何在输入新内容 c++ 之前删除文件中的所有内容
- 文件模式标志"ios::app"是否用于删除文件(如果文件已存在)?
- 查找并删除文件 C++ 中的整行
- 如何删除文件中的数字,通过 c++ fstream 的
- 以编程方式防止重命名或删除文件,但仍使其可写
- C++ 如何使用_rmdir删除文件?
- 关于从驱动器中删除文件的问题
- Linux 从永远在线的应用程序中创建和删除文件
- 用户使用C++中的删除功能删除文件
- 如何在C++中删除文件中的一部分文本
- 我可以删除 *.o文件(代码:: blocks)
- 为什么std ::删除文件始终返回-1
- C++ 使用数字删除文件 io 行
- 如何使用 c++ 删除文件夹及其内容
- 如何在 C++ 中的文件处理中删除文件
- 用数字删除文件
- Cygwin:打开句柄时删除文件
- 接收文件并删除文件中的重复项
- 删除文件 C++ 中字符串中最后一个出现的字符
- 在循环内删除文件时使提升recursive_directory_iterator无效