0

ルートフォルダー内のすべてのフォルダーの名前を見つけて表示するコードがあります。

private string[] GetFolderNames(string virtualDirPath)
{
    string[] Directories;
    if (Directory.Exists(virtualDirPath))
    {
        Directories = Directory.GetDirectories(virtualDirPath);
        for (int i = 0; i < Directories.Length; i++)
        {
            Directories[i] = MapUrl(Directories[i]);//map path to the folder
        }
        return Directories;
    }
    else
    {
        return null;
    }
}

そして、データをドロップダウンリストにバインドするコード:

string[] folders = GetFolderNames(RootPath);
if (folders != null)
{
     dropDownListFolders.DataSource = folders;
     dropDownListFolders.DataBind();
}
else
{
     dropDownListFolders.Items.Insert(0, "No folders available..");
}

上記のコードのように、ドロップダウン リストはすべてのフォルダー名をRootfolderwith path=で表示しますvirtualDirPath

しかし、すべての子フォルダーにまだいくつかのサブフォルダーがあり、各サブフォルダーにいくつかのサブフォルダーがあり、そのサブフォルダーのすべての名前を取得するにはどうすればよいのでしょうか。

for最初のループ内でさらにループを作成してみてください。そして、それは良い方法ではないようです。

ドロップダウンリストに、ルートフォルダー内のすべてのサブフォルダー名、sudfolder の子、および子フォルダーの子を表示する必要があります。ヘルプ!より良い方法を見つけるために、あなたの意見が必要です。

4

3 に答える 3

4
List<string> dirList = new List<string>();

DirectoryInfo[] dir = new DirectoryInfo(@"D:\Path").GetDirectories("*.*", SearchOption.AllDirectories);
foreach(DirectoryInfo d in dir) 
{
    dirList.Add(d.Name);
}

for (int i = 0; i < dirList.Count; i++) 
{
    Console.WriteLine(dirList[i]);
}

これを試して、すべてのフォルダ名を取得dirListしてドロップダウンに追加してください。

于 2013-10-26T08:54:44.090 に答える
1

inbuild Directory.EnumerateDirectories メソッドを使用すると簡単です。 http://msdn.microsoft.com/de-de/library/vstudio/dd383462(v=vs.110).aspx

次のように呼び出すだけです。

Directory.EnumerateDirectories("rootpath", "*", SearchOption.AllDirectories);

これにより、すべてのディレクトリ (「*」) の IEnumerable とそのフル パスが得られます。enum SearchOption.AllDirectories は、検索を再帰的にしたいと言っています。rootpath が出発点です。

さらに、次のように 2 番目のパラメーターを拡張することで、このメソッドをフィルター処理できます。

Directory.EnumerateDirectories("rootpath", "test*", SearchOption.AllDirectories);

これにより、test ("test*") で始まるすべてのディレクトリの IEnumerable が生成されます。

編集:

リスト エントリが重複する可能性がある名前だけではなく、相対パスを表示することを検討する必要があります。

var directories = (from x in Directory.EnumerateDirectories("rootpath", "*", SearchOption.AllDirectories)
                    select x.SubString("rootpath".Length)).ToList();
于 2013-10-26T08:57:47.857 に答える
0

次のメソッドを使用して、すべてのフォルダーのリストを取得します。

 public void traverse(File file, List<String> dirList) {
    // Print the name of the entry
    System.out.println(file);


    // Check if it is a directory
    if (file.isDirectory()) {
        System.out.println(file);
        //add directory name in the list
        dirList.add(file.getName());
        // Get a list of all the entries in the directory
        String entries[] = file.list();

        // Ensure that the list is not null
        if (entries != null) {
            // Loop over all the entries
            for (String entry : entries) {
                // Recursive call to traverse
                traverse(new File(file, entry),dirList);
            }
        }
    }
}

ディレクトリとサブディレクトリのリストを取得したら、それをドロップダウンでバインドします。次のコードを使用して、このメソッドを呼び出します

 DirectoryList directoryList = new DirectoryList();

    //output pram
    ArrayList<String> dirList = new ArrayList<String>();

    directoryList.traverse(new File("D:\\Workspace\\Netbeans\\addapp"), dirList);
于 2013-10-26T08:50:19.067 に答える