C# - 获取不包括隐藏文件的文件列表

Jam*_*add 65 .net c# file

Directory.GetFiles()返回所有文件,甚至是那些标记为隐藏的文件.有没有办法获取排除隐藏文件的文件列表?

Aus*_*nen 100

这应该适合你:

DirectoryInfo directory = new DirectoryInfo(@"C:\temp");
FileInfo[] files = directory.GetFiles();

var filtered = files.Where(f => !f.Attributes.HasFlag(FileAttributes.Hidden));

foreach (var f in filtered)
{
    Debug.WriteLine(f);
}
Run Code Online (Sandbox Code Playgroud)

  • 您可以在一行中完成此操作,不需要SELECT**var files = new DirectoryInfo(@"C:\").GetFiles().Where(x =>(x.Attributes&FileAttributes.Hidden)== 0)** (13认同)
  • 或者甚至只使用目录类(将@astanders解决方案减少8个字符)var files = Directory.GetFiles(@"c:\").其中(x =>(x.Attributes&FileAttributes.Hidden)== 0); (5认同)
  • `Directory.GetFiles`返回一个字符串数组,因此您的代码高尔夫解决方案不能正常工作. (5认同)
  • @AustinSalonen 是正确的,您不能将上述“代码高尔夫”解决方案与 Directory.GetFiles 一起使用,但您可以使用这段讨厌的代码: Directory.GetFiles(@"C:\").Where(x => (新的 FileInfo(x).Attributes & FileAttributes.Hidden)==0)。我不是说你应该,但你可以。 (2认同)

小智 12

// check whether a file is hidden
bool isHidden = ((File.GetAttributes(filePath) & FileAttributes.Hidden) == FileAttributes.Hidden);
Run Code Online (Sandbox Code Playgroud)

  • 简单的解决方案可以很优雅 - 我喜欢当人们展示解决方案而不炫耀Linq时 (2认同)

Jer*_*ban 8

使用.NET 4.0和Directory.EnumerateDirectories,您可以使用此构造:

var hiddenFilesQuery = from file in Directory.EnumerateDirectories(@"c:\temp")
                       let info = new FileInfo(file)
                       where (info.Attributes & FileAttributes.Hidden) == 0
                       select file;
Run Code Online (Sandbox Code Playgroud)

这与其他答案基本相同,除了Directory.EnumerateDirectories有点懒.但是,如果你枚举一切,这不是很有用.

(这里是让查询更具可重复性).