Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从多个文件夹获取文件的LINQ嵌套列表理解_C#_Linq - Fatal编程技术网

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
返回,因此我不需要检查此项。谢谢你的意见。