路径解析子目录

时间:2015-02-16 18:09:58

标签: c# wpf

我得到一个返回的文件/ Path字符串集合。 字符串格式基本上是一个文件或带有子目录的文件。

MySong.mp3

CD1 \ YourSong.mp3

cover.jpg

CD2 \ TheSong.mp3

我需要做的是创建一个Dictionarystring,List - string)

创建要创建的文件夹和该目录的文件列表。

if (item.Name.Contains(@"\"))
//its a subDir...
// now loop thru the whole collection looking for .StartsWith(the folder  substring)
else
{
   //Not Contains SubDir- Create 1 Top Dir to hold these Files..
  // now loop again! for non "\" files..

必须有更好的方法......

2 个答案:

答案 0 :(得分:0)

这需要一个列表,按文件夹名称对其进行分组,然后创建一个包含文件的字典:

List<string> paths = new[] {"song.mp3", "CD1\\song2.mp3", "CD1\\song3.mp3", 
    "CD1\\SUB\\song6.mp3", "song4.mp3", "CD2\\song5.mp3"}.ToList();

Dictionary<string, IEnumerable<string>> dict = paths.GroupBy(Path.GetDirectoryName)
    .ToDictionary(group => group.Key, group => group.Select(Path.GetFileName));

密钥将是文件夹,值为带扩展名的文件名。我们之前需要进行分组,因此我们不会获得重复的密钥。

我们正在使用Path类中的辅助方法来检索文件夹名称和文件名。

答案 1 :(得分:0)

您可以从文件创建查找:

static void Main(string[] args)
{
    List<string> files = new List<string>()
    {
    "MySong.mp3",
    @"CD1\YourSong.mp3",
    "cover.jpg",
    @"CD2\TheSong.mp3"
    };

    var lookup = files.ToLookup(file => Path.GetDirectoryName(file));

    foreach (var item in lookup)
    {
        Debug.WriteLine(item.Key);
        foreach (var subitem in item)
        {
            Debug.WriteLine("  " + subitem);
        }
    }
}

这给出了输出:

    MySong.mp3
    cover.jpg
CD1
    CD1\YourSong.mp3
CD2
    CD2\TheSong.mp3