0

MVC4 の別のフォルダーからすべてのサブフォルダーを一覧表示しようとしています。次のコードがありますが、完全なパスが返されます。フォルダー名だけが必要です。

コントローラ

public ActionResult Gallery()
{
    string path = Server.MapPath("~/Filemanager/userfiles/");
    List<string> picFolders = new List<string>();

    if (Directory.GetFiles(path, "*.jpg").Length > 0)
        picFolders.Add(path);

    foreach(string dir in Directory.GetDirectories(path, "*", SearchOption.AllDirectories))
    {
        if (Directory.GetFiles(dir, "*.jpg").Length > 0)
            picFolders.Add(dir);
    }

    return View(picFolders);
}

CSHTML

@foreach (string picFolders in Model)
{
    <tr>
        <td>
            @picFolders
        </td>
    </tr>
}

これをどのように行う必要がありますか?

4

5 に答える 5

1

パスをDirectoryInfoオブジェクト内にラップして、Nameプロパティを使用できます。

...
foreach(string dir in Directory.GetDirectories(path, "*", SearchOption.AllDirectories))
    {
        if (Directory.GetFiles(dir, "*.jpg").Length > 0)
            picFolders.Add(new DirectoryInfo(dir).Name);
    }
...

または、少し悪用してPath.GetDirectoryNameを使用することもできます。

....
foreach(string dir in Directory.GetDirectories(path, "*", SearchOption.AllDirectories))
    {
        if (Directory.GetFiles(dir, "*.jpg").Length > 0)
            picFolders.Add(Path.GetDirectoryName(dir + "\\e"));
    }
...
于 2013-05-29T14:33:41.360 に答える
1

次のようなことを試してください:

if (Directory.GetFiles(path, "*.jpg").Length > 0)
    picFolders.Add(new System.IO.DirectoryInfo(path).Name);

    foreach(string dir in Directory.GetDirectories(path, "*", SearchOption.AllDirectories))
{
    if (Directory.GetFiles(dir, "*.jpg").Length > 0)
        picFolders.Add(new System.IO.DirectoryInfo(dir).Name);
}

これにより、パスから名前が解析され、コレクションにプッシュされます。お役に立てれば

于 2013-05-29T14:32:20.657 に答える
0

パス内の最後のフォルダー名を見つけたい場合 ( Gabe によるこの回答へのクレジット):

s = s.Substring(s.LastIndexOf("\\", s.Length - 2) + 1)

これは最後のバックスラッシュをスキップすることに注意してください。必要に応じて変更します。

于 2013-05-29T14:29:09.903 に答える