2017-10-18 74 views
-3

如何正确使用哪里过滤EnumerateFiles与属性?我得到以下错误:筛选器属性文件Directory.EnumerateFiles系统隐藏的重新分析点?

'IEnumerable' does not contain a definition for 'Where' and no extension method 'Where' accepting a first argument of type 'IEnumerable'

using System; 
using System.IO; 
using System.Threading; 

namespace ConsoleApp1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var list = Directory.EnumerateFiles(@"c:\", "*", SearchOption.AllDirectories).Where(f => !new FileInfo(f).Attributes.HasFlag(FileAttributes.Hidden | FileAttributes.System | FileAttributes.ReparsePoint)); 

      foreach (var dir in list) 
      { 
       Console.WriteLine(dir); 
       Thread.Sleep(10); 
      } 
     } 

    } 
} 
+1

加上'使用System.Linq的;' – jdphenix

+0

@jdphenix运行的代码,但它不这样做我想要什么。仍然不排除具有属性系统,隐藏和重新分析点的文件。它仍然显示c:\ Documents and Settings访问被拒绝。 – Nichie

+0

可能的[如何使用Directory.EnumerateFiles不包括隐藏和系统文件]的副本(https://stackoverflow.com/questions/34611088/how-to-use-directory-enumeratefiles-excluding-hidden-and-system-files) – wp78de

回答

0

这个工作对我来说:

using System; 
using System.IO; 
using System.Linq; 

namespace ConsoleApp1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      try 
      { 
       var list = Directory.EnumerateFiles(@"c:\", "*", SearchOption.AllDirectories) 
        .Where(f => !(new FileInfo(f).Attributes.HasFlag(FileAttributes.Hidden) || 
            new FileInfo(f).Attributes.HasFlag(FileAttributes.System) || 
            new FileInfo(f).Attributes.HasFlag(FileAttributes.ReparsePoint))); 

       foreach (var file in list) 
       {  
        Console.WriteLine("{0}: {1}", file, new FileInfo(file).Attributes); 
       } 
      } 
      catch(Exception) 
      { } 
     } 

    } 
}