[英]Getting subdirectories of a path that have specific file extensions
I was wondering if there was a way to only retrieve the directories that have certain extensions. 我想知道是否有办法只检索具有某些扩展名的目录。
For example 例如
List<string> directories = Directory.GetDirectories(sourceTextBox.Text, "*", SearchOption.AllDirectories).ToList();
would give me all of the directories and subdirectories inside the path I gave it. 会给我在我给它的路径中的所有目录和子目录。 However I only want it to retrieve the directories that have a .jpg or .png file inside of them.
但是我只希望它检索其中包含.jpg或.png文件的目录。
List<string> directories = Directory.GetDirectories(sourceTextBox.Text, "*.png", SearchOption.AllDirectories).ToList();
directories.addRange(Directory.GetDirectories(sourceTextBox.Text, "*.jpg", SearchOption.AllDirectories).ToList());
Any way I could do this? 我能做到这一点吗?
No guarantees in terms of performance, but for each directory you could check its files to see if it contains any with the matching extension: 在性能方面没有任何保证,但是对于每个目录,您可以检查其文件以查看它是否包含具有匹配扩展名的文件:
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();
There is no built in way of doing it, You can try something like this 没有内置的方法,你可以尝试这样的事情
var directories = Directory
.GetDirectories(path, "*", SearchOption.AllDirectories)
.Where(x=> Directory.EnumerateFiles(x, "*.jpg").Any() || Directory.EnumerateFiles(x, "*.png").Any())
.ToList();
You can use Directory.EnumerateFiles
method to get the file matching criteria and then you can get their Path minus file name using Path.GetDirectoryName
and add it to the HashSet
. 您可以使用
Directory.EnumerateFiles
方法获取文件匹配条件,然后您可以使用Path.GetDirectoryName
获取其路径减去文件名,并将其添加到HashSet
。 HashSet
would only keep the unique entries. HashSet
只保留唯一条目。
HashSet<string> directories = new HashSet<string>();
foreach(var file in Directory.EnumerateFiles(sourceTextBox.Text,
"*.png",
SearchOption.AllDirectories))
{
directories.Add(Path.GetDirectoryName(file));
}
For checking multiple file extensions you have to enumerate all files and then check for extension for each file like: 要检查多个文件扩展名,您必须枚举所有文件,然后检查每个文件的扩展名,如:
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.