2013-05-29 2 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 объектов, каждый со свойством Name и FullName.

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")); 
    } 
... 
Смежные вопросы