【问题标题】:How do I delete a read-only file?如何删除只读文件?
【发布时间】:2010-09-20 22:07:57
【问题描述】:

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

我注意到一些项目文件夹的寿命比应有的长得多,因此我开始进行调查。特别是,我使用过 SVN 的项目的文件夹似乎一直存在。事实证明,.svn 目录中的只读文件没有被删除。我刚刚对一个只读文件做了一个简单的测试,发现System.IO.File.DeleteSystem.IO.FileInfo.Delete不会删除一个只读文件。

我不关心保护这个特定目录中的文件;如果里面有重要的东西,那就是在错误的地方。是否有可以删除只读文件的 .NET 类,还是我必须检查只读属性并剥离它们?

【问题讨论】:

  • 我更改了接受的答案,因为 Gulzar 的代码示例比 Tim Stewart 的更详细。一开始就应该选择那个,但出于某种原因,我更喜欢蒂姆的。人是奇怪的东西!
  • +1 花时间让宇宙中的事情变得更正确。如果我的开发人员能够回去纠正我们自己的小错误,我们就可以取消补救编程课程!

标签: c# .net file


【解决方案1】:

为什么需要检查?只需强行清除只读标志并删除文件即可。

【讨论】:

    【解决方案2】:

    嗯,我想我宁愿放

    >del /F *
    

    进入计划任务。可能由批处理文件包装以记录统计信息。

    我错过了什么吗?

    【讨论】:

    • 是的。他想删除一个特定年龄的文件。不是每个时期的所有文件。
    • 他不想删除所有文件,只想删除超过一定时间的所有文件。
    【解决方案3】:

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

    【讨论】:

    • 不是第一。
    【解决方案4】:

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

    using System.IO;
    
    File.SetAttributes(filePath, FileAttributes.Normal);
    File.Delete(filePath);
    

    【讨论】:

    • 你得到了正确的投票,但你的答案是在蒂姆·斯图尔特说同样的话之后出现的。
    • 在某些情况下,您可能还需要取得文件的所有权,然后才能清除只读标志或将其删除。详情请见stackoverflow.com/questions/12999272
    【解决方案5】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-27
      • 2018-04-19
      相关资源
      最近更新 更多