MVC4列出文件夹中的所有子文件夹

时间:2013-05-29 14:22:35

标签: asp.net-mvc-4 razor

我尝试列出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>
}

我该怎么做?

5 个答案:

答案 0 :(得分:2)

而不是

Directory.GetFiles(path)

你可以使用

new DirectoryInfo(path).GetDirectories()

这会为您提供一系列DirectoryInfo个对象,每个对象都有NameFullName属性。

答案 1 :(得分: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);
}

这将从路径中解析出名称并将其推送到您的集合中。 希望这有帮助

答案 2 :(得分: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"));
    }
...

答案 3 :(得分:1)

你可以这样做:

public ActionResult Gallery()
{
  string path = Server.MapPath(@"path here");
  List<string> picFolders = new List<string>();

  DirectoryInfo dirInfo = new DirectoryInfo(path);

  if (dirInfo.GetFiles("*.jpg").Length > 0)
    picFolders.Add(dirInfo.Name);

  foreach (var dir in dirInfo.GetDirectories())
  {
    if (dir.GetFiles("*.jpg", SearchOption.AllDirectories).Length > 0)
      picFolders.Add(dir.Name);
  }

  return View(picFolders);
}

并且不要忘记更改这样的视图以正确显示表格:

@model IEnumerable<string>

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

希望这能帮到你!

答案 4 :(得分:0)

如果要在路径(credit to this answer by Gabe)中找到最后一个文件夹名称:

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

注意这会跳过最后的反斜杠。根据需要进行修改。