c - 如何使用 C 中的 open() 函数删除现有文件?

标签 c file

我目前正在使用以下行来获取文件描述符:

int fd = open(file_name, O_RDWR | O_APPEND | O_CREAT);

但是当文件已经存在时它会失败(** fd = -1 with Error: permission denied**)。我正在使用 access() 函数来查看文件是否已经存在:

if (access(file_name, F_OK) != -1)
{
   printf("file %s already exists! \n", file_name);
   remove(file_name);  /* delete the existing file */
   fd = open(file_name, O_RDWR | O_APPEND | O_CREAT);
}

对于以下两种场景,有没有更好的方式使用open()函数获取文件描述符:

  1. 如果文件不存在,创建它并返回一个文件描述符
  2. 如果文件存在,删除它并创建一个新文件,然后返回一个文件描述符。

最佳答案

if the file exists, delete it and create a new file, then return a file descriptor.

open() 不支持。最接近的是 O_TRUNC,它截断文件(如果存在),但没有删除O_ 标志> 文件(如果存在),并且您需要文件的写入权限才能截断它。

正如其他人所指出的,您可能想要解决的真正问题是您缺少文件的写入权限。如果你拥有这个文件,如果你想写入它,你应该改变权限;如果您拥有该文件,那么所有者可能不希望您写入,因此您不应该写入。

关于c - 如何使用 C 中的 open() 函数删除现有文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23173155/

相关文章:

c - "conversion to non-scalar type requested"这个小代码片段中的错误

c - 如何用C语言获取图像每个像素点的强度?

java - 如何循环遍历一个目录,获取所有文件名,然后在 Java 中获取这些文件的内容

c - 关闭 [close(3)] 和清除 [fd_clr(3)] 文件描述符有什么区别?

Linux file命令对文件进行分类

linux - linux 有没有显示文件中指定长度字符串的命令?

c - int 指针是一个 int 数组吗?

C++/C : Prepend length to Char[] in bytes (binary/hex)

c - 之后打印一个电话

c# - 如何从文件的完整路径获取目录?