我尝试列出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>
}
我该怎么做?
答案 0 :(得分:2)
而不是
Directory.GetFiles(path)
你可以使用
new DirectoryInfo(path).GetDirectories()
这会为您提供一系列DirectoryInfo
个对象,每个对象都有Name
和FullName
属性。
答案 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)
注意这会跳过最后的反斜杠。根据需要进行修改。