2013-05-29 167 views
0

我試圖列出來自MVC4中另一個文件夾的所有子文件夾。我有以下代碼,但它返回完整的路徑,我只想要文件夾名稱。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> 
} 

我應該怎樣做呢?

回答

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> 

希望這對你有所幫助!

0

如果你想在路徑(credit to this answer by Gabe)來找到最後一個文件夾名稱:

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

注意此跳過最後的反斜槓。根據需要修改。

2

而不是

Directory.GetFiles(path)

你可以使用

new DirectoryInfo(path).GetDirectories()

這將給你DirectoryInfo對象的數組,每一個NameFullName財產。

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); 
} 

這將從路徑解析出了名,並將它推到你的收藏。 希望這會有所幫助

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")); 
    } 
... 
相關問題