1

私は次の可能な形式で特定のパスにたくさんのディレクトリを持っています:

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

私の説明が十分に明確であることを願っていますが、何か意味がない場合は、私に知らせてください。

4

2 に答える 2

1

Uがそのようなデータ構造を持っている場合は、ディレクトリ名をキーとして1つの辞書を使用し、そのファイル名のリストを値として使用することをお勧めします。例えば:

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インデックスによってディクショナリ値を取得できないことに注意してください。しかし、Uがこのようにしたくない場合、Uは次のことを行うことができます。

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は2つの異なるデータ構造を使用して関連データを表します。論理的には辞書を使うことをお勧めします。

于 2012-09-10T07:52:59.477 に答える
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....
 }
于 2012-09-10T07:51:46.930 に答える