如何清除文件内容?


79

每当应用程序启动时,我都需要清除特定文件的内容。我该怎么做?

Answers:


129

您可以使用File.WriteAllText 方法。

System.IO.File.WriteAllText(@"Path/foo.bar",string.Empty);

我有一个硬链接的文件,并使用File.WriteAllText,似乎有时(?)会删除该文件,因为这些硬链接不会保持更新。
Ciantic '16

如果此操作后立即执行其他操作将访问文件,则建议您不要这样做。我遇到的问题是,在此代码行之后文件没有被关闭写入,并引起问题IO exceptions of file is in use,因此,我建议您通过文件流手动处理它
deadManN

81

这是我在不创建新文件的情况下清除文件内容的操作,因为我不希望文件显示新的创建时间,即使应用程序只是更新了其内容也是如此。

FileStream fileStream = File.Open(<path>, FileMode.Open);

/* 
 * Set the length of filestream to 0 and flush it to the physical file.
 *
 * Flushing the stream is important because this ensures that
 * the changes to the stream trickle down to the physical file.
 * 
 */
fileStream.SetLength(0);
fileStream.Close(); // This flushes the content, too.

我使用.NET 3.5,以防万一您想知道版本。
Abhay Jain

Olive,如果它回答了您的问题,请您将其标记为答案。但是,如果提出的解决方案在您的情况下不起作用,请即使在那时也告诉我们。
Abhay Jain

5
+1这是首先获取文件锁,安全检查文件属性并最终清除内容的唯一方法。
mafu 2012年

1
这正是我自己需要的...我需要让服务与应用程序通信以向用户发送简单的逐行消息,这使我可以保持文件锁定并清除消息以防止服务应用程序避免插入和无意删除邮件或复制邮件。
phillk6751 2014年

2
在using块中创建文件流是否明智?那也将自动关闭流。
Wuolennaj

11

使用FileMode.Truncate每次你创建的文件。还要放在File.Create里面try catch


2

最简单的方法可能是通过您的应用程序删除该文件,然后使用相同的名称创建一个新文件...以更简单的方式,只需使您的应用程序用新文件覆盖它即可。


1
如果您尝试在删除后不久创建文件,可能会出现问题。有时操作系统无法创建文件,因为它“认为”该文件仍然存在。
Dmitrii Lobanov

@Dmitry Lobanov-[我知道这是一个老话题]。我不接受操作系统有时认为文件仍然存在,除非有充分的理由。如果这样做的话,那将是一个非常糟糕的操作系统。更有可能的是,在现有文件上仍有打开的句柄。如果您不小心关闭文件,甚至可能是您自己的软件(例如通过使用“使用”来确保处置)。也可能是防病毒软件。同意你的结论。我认为FileMode.Truncate是要走的路。
史蒂夫·基德

2

最简单的方法是:

File.WriteAllText(path, string.Empty)

但是,我建议您使用,FileStream因为第一个解决方案可能会抛出UnauthorizedAccessException

using(FileStream fs = File.Open(path,FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
     lock(fs)
     {
          fs.SetLength(0);
     }
}

1

尝试使用类似

文件创建

在指定路径中创建或覆盖文件。


对于所提出的问题,这不是一个好主意:不要删除文件中已有的数据-只会将其覆盖为新数据的长度,因此,如果旧数据>新数据,则最终将两者混合。
纳姆福德2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.