1

.mp3複数のフォルダからファイル を取得しようとしています。

このクエリを使用して、1つのフォルダーに対して既に実行できます。

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 paths = new Dictionary<string, string> {
            {"default_music", @"C:\Users\Public\Music\Sample Music"},
            {"alternative_folder", @"C:\tmp"}
            };

this.MusicList.ItemsSource = 
from string fileName in (from string directoryName in paths.Values select Directory.GetFiles(directoryName))
where System.IO.Path.GetExtension(fileName) == ".mp3"
select new FileInfo(fileName);

from string directoryName in paths.Values select Directory.GetFiles(directoryName);は、そのフィールド{System.Linq.Enumerable.WhereSelectEnumerableIterator<string,string[]>}に自分のパスがあり、自分のファイルが含まれている を返します。sourceResult View.mp3

ありがとうございました

4

4 に答える 4

6

以下を試してください

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));
于 2013-03-06T16:12:39.957 に答える
3

検索パターンを受け入れるDirectoryInfo.EnumerateFilesメソッドを使用できます。したがって、すべてのファイルを取得して、への呼び出しを介してそれらをフィルタリングする必要はありません。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"));

また、インスタンスをDirectoryInfo.EnumerateFiles返しFileInfoます。これも必要なものです。

于 2013-03-06T16:17:33.937 に答える
1

これを試して

Directory.EnumerateFiles(@"C:\Users\Public\Music\Sample Music", "*.mp3", SearchOption.AllDirectories)

GetFiles().mp3の列挙可能なリストを返します。これは、さらにフィルタリングまたは列挙することができます。これは、多数のファイルやディレクトリよりも効率的です。

http://msdn.microsoft.com/en-us/library/dd383571.aspx

于 2013-03-06T16:17:16.283 に答える
0

それがファイル/ディレクトリであるかどうかを追跡する評価可能な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-誤読された質問、「ディレクトリのセットから」の部分を見逃しました。私の恥は計り知れません。:)

于 2013-03-06T16:15:58.343 に答える