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

2

代替

Directory.GetFiles(path)

你可以使用

new DirectoryInfo(path).GetDirectories()

这会给你一个DirectoryInfo对象数组,每个对象都有一个NameandFullName属性。

于 2013-05-29T14:31:40.527 回答
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 回答
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

你可以这样做:

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>

希望这对你有帮助!

于 2013-05-29T14:49:35.860 回答
0

如果您想在路径中找到最后一个文件夹名称(归功于 Gabe 这个答案):

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

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

于 2013-05-29T14:29:09.903 回答