我在以下可能的格式的某些路径上有一堆目录:
C:\Program Files\Logic\DDC[ 0 ]
C:\Program Files\Logic\DDC[ 1]
C:\Program Files\Logic\DDC[2 ]
C:\Program Files\Logic\DDC[3]
我想完成以下任务:
1)清除所有编号的DDC目录,并将它们的路径存储在字符串列表
中I.E: List<String> ddcPaths -> should have:
ddcPaths[0] = "DDC[0]";
ddcPaths[1] = "DDC[1]";
ddcPaths[2] = "DDC[2]";
2)直接在DDC文件夹下安装所有文件但没有比这更深的文件
I.E: If DDC[0] has a.txt, b.txt and obj\c.txt, I should get
List<String> ddc_0 -> should have
ddc_0[0] = "a.txt";
ddc_0[1] = "b.txt";
我希望我的解释很清楚,但如果事情没有意义,请告诉我。
答案 0 :(得分:1)
如果U有这样的数据结构,我建议U应该使用一个目录名为字典的字典作为密钥,并将其文件名列表作为值。例如:
var ddcPaths = new Dictionary<string, List<string>>();
foreach (var directoryInfo in new DirectoryInfo(@"C:\Program Files\Logic\").GetDirectories())
{
if (directoryInfo.Name.Contains("DDC["))
{
ddcPaths.Add(directoryInfo.Name, new List<string>());
foreach (var fileInfo in directoryInfo.GetFiles())
{
ddcPaths[directoryInfo.Name].Add(fileInfo.FullName);
}
}
}
但你应该注意到,不能通过int索引得到字典值,只能通过在这个字典中声明的键(在我们的例子中是文件夹名)。但如果你不想这样做你可以做以下事情:
var ddcPaths = new List<string>();
var filePaths = new List<List<string>>();
foreach (var directoryInfo in new DirectoryInfo(@"C:\Program Files\Logic\").GetDirectories())
{
if (directoryInfo.Name.Contains("DDC["))
{
ddcPaths.Add(directoryInfo.Name);
var tempList = new List<string>();
foreach (var fileInfo in directoryInfo.GetFiles())
{
tempList.Add(fileInfo.FullName);
}
filePaths.Add(tempList);
}
}
但在这种情况下,U使用两种不同的数据结构来表示相关数据。我建议在逻辑上使用字典。
答案 1 :(得分:0)
您可以使用DirectoryInfo
。
DirectoryInfo dirInfo = new DirectoryInfo("yourFolderPath");
IEnumerable<DirectoryInfo> subDirs = dirInfo.EnumerateDirectories();
List<string> subDirsNames = new List<string>();
foreach (var subDir in subDirs)
{
subDirsNames.Add(subDir.Name.Trim());
IEnumerable<string> files = subDir.EnumerateFiles().Select(i => i.Name);
//do something with this list....
}