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

Posted

技术标签:

【中文标题】如何清除 C 中文件的全部内容?【英文标题】:How do I clear the whole contents of a file in C? 【发布时间】:2011-06-16 11:03:08 【问题描述】:

我有一个包含一些 user1 数据的文件。我想通过清除文件的内容来为 user2 使用相同的文件。

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

对于具有 0666 权限的文件,该文件是否仍保持其 666 权限或将 umask 发挥作用并将其设置为 644。基本上我想知道它是否清除了文件还是会删除该文件并重新创建一个具有相同名称的文件(在这种情况下它将使用 644)【参考方案2】:

fopen(filename, flag) 只需用 flag= "w""wb" 打开它就会被清除

【讨论】:

thanx stefan,但我想强制(明确)清除文件 好的gys!但在编。执行。 em 多次打开/关闭(附加)。我只想在某些情况发生时清除文件。 @mujahid:然后正常打开它直到发生这种情况,此时您可以使用wwb 标志打开它。如果您愿意,可以立即关闭它,然后在您的代码正常执行时打开它以进行追加。 @mujahid:不用喊,我们能听到你的声音:)【参考方案3】:
fclose(fopen("file.txt", "w"));

为什么会这样:

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

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

【讨论】:

【参考方案4】:

有两种方式:

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");   

【讨论】:

仅供参考:第二个是 Bourne shell,而不是 C。 另外,第二个可以替换为对truncate() 的一次调用,它替换了无用的猫。 From man 2 open: Unlike the other values that can be specified in flags, the access mode values O_RDONLY, O_WRONLY, and O_RDWR do not specify individual bits. Rather, they define the low order two bits of flags, and are defined respectively as 0, 1, and 2. In other words, the combination O_RDONLY | O_WRONLY is a logical error, and certainly does not have the same meaning as O_RDWR. 所以通过指定O_RDONLY | O_WRONLY,您将低位 2 位设置为 3 而不是 2。3 的用法是实现定义的,并且因系统而异. 由于Braden Best 上面所说的内容而被否决。在您修复之前,您的示例从根本上是错误的。【参考方案5】:

我正在使用:

fp=freopen(NULL,"w",fp);

【讨论】:

以上是关于如何清除 C 中文件的全部内容?的主要内容,如果未能解决你的问题,请参考以下文章

linux中如何清除文件中旧的操作历史记录

如何删除全部历史记录内容?

excel数据表格中的空白行如何清除?

如何清除VS2010的历史记录

C# 如何在文本文件中添加数据而不清除原来的内容?

SystemUI 调整Recents中全部清除按钮位置