如何在C中清除文件的全部内容?

muj*_*hid 21 c file-io file file-handling

我有一个带有user1数据的文件.我想通过清除文件的内容为user2使用相同的文件.

我的想法是,当一个新用户来时,前一个用户的数据应该是清楚的,并且应该为新用户准备相同的文件.

bin*_*inW 39

正如@stefan所说,使用fopen()"w"模式将为你完成这项工作.当您使用"w"标志打开文件时,它会创建一个用于写入的空文件.如果已存在具有相同名称的文件,则其内容将被删除,并且该文件将被视为空的新文件.

如果文件已经打开,你可以使用freopen()stdio.h中的函数和"w"模式,因为它将首先关闭文件然后重新打开它以写入擦除之前文件中的任何内容.


ste*_*fan 15

fopen(filename, flag)只是标志打开= "w"或者"wb",它会被清除

  • @mujahid:不需要喊,我们可以听到你:) (8认同)
  • @mujahid:然后正常打开它直到发生这种情况,此时你可以用`w`或`wb`标志打开它.如果您愿意,可以立即关闭它,然后在您的代码正常执行时打开它以进行追加. (3认同)

Edw*_*rak 10

fclose(fopen("file.txt", "w"));
Run Code Online (Sandbox Code Playgroud)

为什么这样有效:

write:为输出操作创建一个空文件.如果已存在具有相同名称的文件,则会丢弃其内容,并将该文件视为新的空文件.

(引自http://www.cplusplus.com/reference/cstdio/fopen/)


gar*_*iit 6

有两种方法:

1. fd=open(filename,O_RDONLY | O_WRONLY | O_TRUNC);


2. [cat /dev/null > filename] for BASH. It can be directly used in c program using [system()] system call. 

   system("cat /dev/null > filename");   
Run Code Online (Sandbox Code Playgroud)

  • 来自“man 2 open”:“与可以在标志中指定的其他值不同,访问模式值 O_RDONLY、O_WRONLY 和 O_RDWR 不指定各个位。相反,它们定义了标志的低位两位,并分别定义为 0、1 和 2。换句话说,组合 O_RDONLY | O_WRONLY 是一个逻辑错误,并且肯定与 O_RDWR 具有不同的含义。`因此通过指定`O_RDONLY | O_WRONLY`,您将低位 2 位设置为 3 而不是 2。3 的用法是实现定义的,并且因系统而异。 (2认同)