簡體   English   中英

獲取具有特定文件擴展名的路徑的子目錄

[英]Getting subdirectories of a path that have specific file extensions

我想知道是否有辦法只檢索具有某些擴展名的目錄。

例如

List<string> directories = Directory.GetDirectories(sourceTextBox.Text, "*", SearchOption.AllDirectories).ToList();

會給我在我給它的路徑中的所有目錄和子目錄。 但是我只希望它檢索其中包含.jpg或.png文件的目錄。

List<string> directories = Directory.GetDirectories(sourceTextBox.Text, "*.png", SearchOption.AllDirectories).ToList();
directories.addRange(Directory.GetDirectories(sourceTextBox.Text, "*.jpg", SearchOption.AllDirectories).ToList());

我能做到這一點嗎?

在性能方面沒有任何保證,但是對於每個目錄,您可以檢查其文件以查看它是否包含具有匹配擴展名的文件:

List<string> imageDirectories = Directory.GetDirectories(sourceTextBox.Text, "*", SearchOption.AllDirectories)
    .Where(d => Directory.EnumerateFiles(d)
        .Select(Path.GetExtension)
        .Where(ext => ext == ".png" || ext == ".jpg")
        .Any())
    .ToList();

沒有內置的方法,你可以嘗試這樣的事情

var directories = Directory
.GetDirectories(path, "*", SearchOption.AllDirectories)
.Where(x=> Directory.EnumerateFiles(x, "*.jpg").Any() || Directory.EnumerateFiles(x, "*.png").Any())
.ToList();

您可以使用Directory.EnumerateFiles方法獲取文件匹配條件,然后您可以使用Path.GetDirectoryName獲取其路徑減去文件名,並將其添加到HashSet HashSet只保留唯一條目。

HashSet<string> directories = new HashSet<string>();
foreach(var file in Directory.EnumerateFiles(sourceTextBox.Text, 
                                             "*.png",  
                                             SearchOption.AllDirectories))
{
    directories.Add(Path.GetDirectoryName(file));
}

要檢查多個文件擴展名,您必須枚舉所有文件,然后檢查每個文件的擴展名,如:

HashSet<string> directories = new HashSet<string>();
string[] allowableExtension = new [] {"jpg", "png"};
foreach(var file in Directory.EnumerateFiles(sourceTextBox.Text,
                                             "*", 
                                             SearchOption.AllDirectories))
{
    string extension = Path.GetExtension(file);
    if (allowableExtension.Contains(extension))
    {
        directories.Add(Path.GetDirectoryName(file));
    }
}

暫無
暫無

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

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