How to use Directory.EnumerateFiles excluding hidden and system files

I list all the files in the directory so that I can process them later. I want to exclude hidden and system files.

This is what I have so far:

IEnumerable<IGrouping<string, string>> files;

files = Directory.EnumerateFiles(sourcePath, "*", SearchOption.AllDirectories)
       .Where(f => (new FileInfo(f).Attributes & FileAttributes.Hidden & FileAttributes.System) == 0)
       .GroupBy(Path.GetDirectoryName);

However, if I look at the results, I still get the hidden and system files:

foreach (var folder in files)
{
    foreach (var file in folder)
    {
        // value for file here still shows hidden/system file paths
    }
}

I found this question that has a similar example from Jerome, but I could not even compile it.

What am I doing wrong?

+6
source share
3 answers
.Where(f => (new FileInfo(f).Attributes & FileAttributes.Hidden & FileAttributes.System) == 0)

FileAttributes , , . , FileAttributes.Hidden & FileAttributes.System 0. :

(new FileInfo(f).Attributes & 0) == 0

, & 0.

, , , , :

.Where(f => (new FileInfo(f).Attributes & (FileAttributes.Hidden | FileAttributes.System)) == 0)

Enum.HasFlag, :

.Where(f => !new FileInfo(f).Attributes.HasFlag(FileAttributes.Hidden | FileAttributes.System))
+9

, DirectoryInfo FileInfo, :

var mask= FileAttributes.Hidden | FileAttributes.System;

var di=new DirectoryInfo(sourcePath);
var files=di.EnumerateFiles("*", SearchOption.AllDirectories)
            .Where(fi=>(fi.Attributes & mask) == 0)
            .GroupBy(fi=>fi.DirectoryName);

, , 0. Attributes 0.

, , , .. FileAttributes.Hidden | FileAttributes.System FileAttributes.Hidden | FileAttributes.System.

+3

You can use FileSystemInfo.Attributes.HasFlag:

DirectoryInfo dir = new DirectoryInfo( sourcePath );
var files = dir.EnumerateFiles("*", SearchOption.AllDirectories)
    .Where(f => !f.Attributes.HasFlag(FileAttributes.Hidden) && !f.Attributes.HasFlag(FileAttributes.System))
    .GroupBy(f => f.DirectoryName);
+1
source

Source: https://habr.com/ru/post/1622907/


All Articles