簡體   English   中英

獲取隱藏目錄中的文件以外的所有文件?

[英]Get all files except files in hidden directories?

我想創建一個目錄中所有文件的列表,除了隱藏的fies和目錄中隱藏文件夾內的文件。 我用過這種方法,

new DirectoryInfo(path).GetFiles("*.*", SearchOption.AllDirectories)
                     .Where(f => (f.Attributes & FileAttributes.Hidden) == 0)

但上面的方法返回隱藏文件夾中的文件。 有沒有其他方法可以做到這一點,而無需遞歸迭代目錄?

那是因為隱藏子文件夾中的文件沒有被隱藏。 要檢查這一點,你必須遞歸地走到每個文件夾並檢查文件夾屬性。

功能示例:

   private static IList<FileInfo> getNonHidden(DirectoryInfo baseDirectory)
    {
        var fileInfos = new List<System.IO.FileInfo>();
        fileInfos.AddRange(baseDirectory.GetFiles("*.*", SearchOption.TopDirectoryOnly).Where(w => (w.Attributes & FileAttributes.Hidden) == 0));
        foreach (var directory in baseDirectory.GetDirectories("*.*", SearchOption.TopDirectoryOnly).Where(w => (w.Attributes & FileAttributes.Hidden) == 0))
            fileInfos.AddRange(getNonHiddenFiles(directory));

        return fileInfos;
    }

如何使用:

  var path = @"c:\temp\123";
  var result = getNonHidden(new DirectoryInfo(path));

試試這樣:

foreach (DirectoryInfo Dir in Directory.GetDirectories(directorypath))
{
    if (!Dir.Attributes.HasFlag(FileAttributes.Hidden))
    {

    }
}

沒有“手動迭代”的一種方法如下:

var dirInfo = new DirectoryInfo(path);
var hiddenFolders = dirInfo.GetDirectories("*", SearchOption.AllDirectories)
    .Where(d => (d.Attributes & FileAttributes.Hidden) != 0)
    .Select(d => d.FullName);

var files = dirInfo.GetFiles("*.*", SearchOption.AllDirectories)
    .Where(f => (f.Attributes & FileAttributes.Hidden) == 0 && 
        !hiddenFolders.Any(d => f.FullName.StartsWith(d)));

但是這將是遍歷整個目錄樹的兩倍,並已在.Any -overhead每個文件=>使用@ Catburry的解決方案,因為它有一個更好的性能和更容易維護IMO ...

你能嘗試下面的代碼:

var x = new DirectoryInfo(@"D://Priyank Sheth/Projects/").GetFiles("*.*", SearchOption.AllDirectories)
                     .Where(f => (f.Directory.Attributes & FileAttributes.Hidden) == 0 && (f.Attributes & FileAttributes.Hidden) == 0);

我沒有嘗試過,但如果它不起作用,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM