如何删除只读文件?


72

我有一个垃圾目录,在这里我可以下载下载,一次性项目,电子邮件草稿以及其他各种有用的东西,这些东西可能在几天之内有用,但并不需要永远保存。为了阻止该目录接管我的机器,我编写了一个程序,该程序将删除所有早于指定天数的文件,并记录一些有关已删除文件数及其大小的统计信息,以供娱乐。

我注意到一些项目文件夹的生存期超出了预期,因此我开始进行调查。尤其是,似乎在我使用SVN的项目的文件夹中依旧。原来.svn目录中的只读文件没有被删除。我只是对只读文件进行了简单的测试,发现System.IO.File.DeleteSystem.IO.FileInfo.Delete不会删除只读文件。

我不在乎保护此特定目录中的文件;如果重要的地方在错误的地方。是否有一个.NET类可以删除只读文件,或者我将不得不检查只读属性并将其删除?


2
我更改了接受的答案,因为Gulzar的代码示例比Tim Stewart的示例更为详细。本来应该选择那个的,但是出于某种原因,我更喜欢蒂姆。人是奇怪的东西!
OwenP

4
+1花费时间使宇宙中的事物变得更加正确。如果仅我的开发人员可以返回并纠正我们自己的次要违规行为,我们将可以取消补救编程类!
亚当·利斯

Answers:


153

根据File.Delete的文档,您必须删除只读属性。您可以使用File.SetAttributes()设置文件的属性。

using System.IO;

File.SetAttributes(filePath, FileAttributes.Normal);
File.Delete(filePath);

您会因自己是对的而感到不满,但您的答案是在蒂姆·斯图尔特(Tim Stewart)发表同样话后提出的。
OwenP

在某些情况下,您可能需要先拥有文件的所有权,然后才能清除或删除只读标志。有关详细信息,请参见stackoverflow.com/questions/12999272
格雷格·布雷


19

如果碰巧正在使用FileInfo对象,则等效项是:

file.IsReadOnly = false;
file.Delete();


1

嗯,我想我宁愿放

>del /F *

完成一项任务。可能被批处理文件包装以用于记录统计信息。

我想念什么吗?


是。他想删除一个特定年龄的文件。并非每个时期都有所有文件。
DrFloyd5

他不想删除所有文件,而只删除早于一定时间的所有文件。
蒂姆·斯图尔特
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.