【问题标题】:How to Exclude protected Operating system files in search如何在搜索中排除受保护的操作系统文件
【发布时间】:2013-04-10 07:33:20
【问题描述】:

(使用 windows 7 64 位和 C#)

有没有办法从搜索中排除这些受保护的文件?

这是显示文件夹中的所有文件,包括“系统文件”

string[] files = Directory.GetFiles(directory);

【问题讨论】:

    标签: c# file search directory


    【解决方案1】:

    对于每个文件,您必须检查文件属性,如下所示

    FileAttributes att = File.GetAttributes(@"c:\samplefile.dll");
    

    然后使用下面的测试

    if ((att & FileAttributes.System) == FileAttributes.System)
    {
        // the file is system
    }
    

    【讨论】:

      【解决方案2】:
      var list = new DirectoryInfo(@"C:\").GetFiles()
                      .Where(f => !f.Attributes.HasFlag(FileAttributes.System))
                      .Select(f => f.FullName)
                      .ToList();
      

      【讨论】:

      • @SonerGönül 当然,我在发布之前对其进行了测试。见msdn.microsoft.com/en-us/library/…
      • 确认工作,谢谢。使用 lambda 表达式的方式非常巧妙。
      • 好的 - 只是为了教育一点:f => f.FullName 是一个 lambda 表达式。 list.Where().Select().ToList() 是 linq 方法语法。
      • ...教育和烦人,这是我的强项!
      • 哈哈谢谢。就像那句话说的那样“我这辈子从来没有从任何同意我的人那里学到什么”
      【解决方案3】:

      您可以使用FileInfo

      var fileInfo = new FileInfo(path);
      if((fileInfo.Attributes & FileAttributes.System) != FileAttributes.System))
      {
          // path is not a system file
      }
      

      【讨论】:

      • 接受的答案对我造成了错误,但这个工作正常。
      【解决方案4】:

      Directory.GetFiles 与所有其他适用于文件系统的 .Net 框架方法一样,不使用资源管理器设置。你可以通过路径获取FileInfo,然后自己检查属性过滤掉隐藏文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-04
        • 1970-01-01
        • 1970-01-01
        • 2017-05-20
        • 1970-01-01
        • 2013-08-22
        • 2011-04-20
        • 1970-01-01
        相关资源
        最近更新 更多