C# 从多个文件夹获取文件的LINQ嵌套列表理解
我正在尝试从多个文件夹中获取C# 从多个文件夹获取文件的LINQ嵌套列表理解,c#,linq,C#,Linq,我正在尝试从多个文件夹中获取.mp3文件 我已经可以通过此查询为一个文件夹执行此操作: this.MusicList.ItemsSource = from string fileName in Directory.GetFiles(@"C:\Users\Public\Music\Sample Music") where System.IO.Path.GetExtension(fileName) == ".mp3"
.mp3
文件
我已经可以通过此查询为一个文件夹执行此操作:
this.MusicList.ItemsSource =
from string fileName in Directory.GetFiles(@"C:\Users\Public\Music\Sample Music")
where System.IO.Path.GetExtension(fileName) == ".mp3"
select new FileInfo(fileName);
对于目录列表,还有其他方法吗
以下是我迄今为止尝试过的内容(未返回任何结果):
var路径=新字典{
{“默认音乐”@“C:\Users\Public\music\Sample music”},
{“备选文件夹”@“C:\tmp”}
};
this.MusicList.ItemsSource=
从中的字符串文件名(从路径中的字符串目录名。值选择目录。获取文件(目录名))
其中System.IO.Path.GetExtension(文件名)=“.mp3”
选择新文件信息(文件名);
来自路径中的字符串directoryName。值选择Directory.GetFiles(directoryName)
返回一个{System.Linq.Enumerable.whereselectEnumerableTerator}
,其源
字段中包含我的路径,其结果视图
包含我的.mp3
文件
谢谢请尝试以下方法
this.MusicList.ItemsSource =
from path in paths
from fileName in Directory.GetFiles(path)
where System.IO.Path.GetExtension(fileName) == ".mp3"
select new FileInfo(fileName);
严格方法调用版本
this.MusicList.ItemSource = paths
.SelectMany(path => Directory.GetFiles(path))
.Where(fileName => System.IO.Path.GetExtension(fileName) == ".mp3")
.Select(fileName => new FileInfo(fileName));
试试下面的方法
this.MusicList.ItemsSource =
from path in paths
from fileName in Directory.GetFiles(path)
where System.IO.Path.GetExtension(fileName) == ".mp3"
select new FileInfo(fileName);
严格方法调用版本
this.MusicList.ItemSource = paths
.SelectMany(path => Directory.GetFiles(path))
.Where(fileName => System.IO.Path.GetExtension(fileName) == ".mp3")
.Select(fileName => new FileInfo(fileName));
替代可跟踪文件/目录的EsteTable JaredPar:
var basePath = @"c:\temp";
var query =
from entry in Directory.EnumerateFileSystemEntries(basePath, "*.*", SearchOption.AllDirectories)
let isDirectory = Directory.Exists(entry)
let isFile = File.Exists(entry)
select new { isDirectory, isFile, entry};
query.Dump();
编辑:Doh-误读问题,错过了“从一组目录”部分;我的羞耻是无法估量的 替代跟踪文件/目录的可存储JaredPar:
var basePath = @"c:\temp";
var query =
from entry in Directory.EnumerateFileSystemEntries(basePath, "*.*", SearchOption.AllDirectories)
let isDirectory = Directory.Exists(entry)
let isFile = File.Exists(entry)
select new { isDirectory, isFile, entry};
query.Dump();
编辑:Doh-误读问题,错过了“从一组目录”部分;我的羞耻是无法估量的 试试这个
Directory.EnumerateFiles(@"C:\Users\Public\Music\Sample Music", "*.mp3", SearchOption.AllDirectories)
返回.mp3的可枚举列表,您可以对其进行进一步筛选或枚举等。对于大量文件和/或目录,这比GetFiles()
更有效
试试这个
Directory.EnumerateFiles(@"C:\Users\Public\Music\Sample Music", "*.mp3", SearchOption.AllDirectories)
返回.mp3的可枚举列表,您可以对其进行进一步筛选或枚举等。对于大量文件和/或目录,这比GetFiles()
更有效
您可以使用接受搜索模式的方法。因此,您不需要通过调用Path.GetExtension
var paths = new Dictionary<string, string> {
{"default_music", @"C:\Users\Public\Music\Sample Music"},
{"alternative_folder", @"C:\tmp"}
};
MusicList.ItemsSource = paths.Values.Select(p => new DirectoryInfo(p))
.SelectMany(d => d.EnumerateFiles("*.mp3"));
var路径=新字典{
{“默认音乐”@“C:\Users\Public\music\Sample music”},
{“备选文件夹”@“C:\tmp”}
};
MusicList.ItemsSource=path.Values.Select(p=>newdirectoryinfo(p))
.SelectMany(d=>d.Enumerate文件(“*.mp3”);
另外DirectoryInfo.EnumerateFiles
返回FileInfo
实例,这也是您需要的。您可以使用接受搜索模式的方法。因此,您不需要通过调用Path.GetExtension
var paths = new Dictionary<string, string> {
{"default_music", @"C:\Users\Public\Music\Sample Music"},
{"alternative_folder", @"C:\tmp"}
};
MusicList.ItemsSource = paths.Values.Select(p => new DirectoryInfo(p))
.SelectMany(d => d.EnumerateFiles("*.mp3"));
var路径=新字典{
{“默认音乐”@“C:\Users\Public\music\Sample music”},
{“备选文件夹”@“C:\tmp”}
};
MusicList.ItemsSource=path.Values.Select(p=>newdirectoryinfo(p))
.SelectMany(d=>d.Enumerate文件(“*.mp3”);
另外
DirectoryInfo.EnumerateFiles
返回FileInfo
实例,这也是您所需要的。Directory.GetFiles
有一个重载,带有一个searchPattern
,您应该使用它来过滤:Directory.GetFiles(@“C:\Users\Public\Music\Sample Music”,“*.mp3”)
Directory.GetFiles
有一个重载,带有一个searchPattern
,您应该使用它来筛选:Directory.GetFiles(@“C:\Users\Public\Music\Sample Music”,“*.mp3”)代码>路径将从FolderBrowserDialog
返回,因此我无需对此进行检查。谢谢您的输入。路径将从FolderBrowserDialog
返回,因此我不需要检查此项。谢谢你的意见。