枚举以下目录和文件的最佳方法

时间:2012-09-10 07:28:41

标签: c# .net wpf string directory

我在以下可能的格式的某些路径上有一堆目录:

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";

我希望我的解释很清楚,但如果事情没有意义,请告诉我。

2 个答案:

答案 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....
 }