我得到一个返回的文件/ 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..
必须有更好的方法......
答案 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