2010-01-11 24 views
16

In meiner MVC-Anwendung habe ich die folgenden Pfade;Dateien in einem Ordner abrufen

  • /content/images/full
  • /content/images/Daumen

Wie würde ich in meinem C# Controller, erhalten eine Liste aller Dateien in meinem Daumen Ordner?

bearbeiten

Ist Server.MapPath immer noch der beste Weg?

Ich habe dies jetzt DirectoryInfo di = new DirectoryInfo(Server.MapPath("/content/images/thumbs"));, aber es ist nicht der richtige Weg.

Gibt es dafür eine Best Practice in MVC oder ist das obige immer noch korrekt?

+1

Der oben ('Server.MapPath') ist meiner Meinung nach korrekt und akzeptabel. –

Antwort

5
Directory.GetFiles("/content/images/thumbs") 

Das wird alle Dateien in einem Verzeichnis in einem String-Array erhalten.

+2

@Daniel Ich kann das nicht zur Arbeit bringen. Es wird eher unter c: \ content \ images \ thumbs als auf meiner Webanwendungsebene abgebildet. – griegs

+0

Können Sie weitere Informationen zu Ihren Versuchen bereitstellen? Es klingt, als ob Sie versuchen, eine Liste von Dateipfaden zur Ansicht zurückzugeben. Versuchen Sie in diesem Fall, in der Ansicht '<% ​​= Server.MapPath (Dateipfad)%>' zu verwenden, wobei Dateipfad ein lokaler Pfad ist. –

+0

Whoops, bemerkte gerade, dass 'Server.MapPath()' tatsächlich einen Serverpfad in einen Dateipfad konvertiert. Suchen Sie nach anderen Lösungen jetzt ... –

38

.NET 4.0 hat eine effizientere Methode für diese bekommt:

Directory.EnumerateFiles(Server.MapPath("~/Content/images/thumbs")); 

Sie ein IEnumerable<string> erhalten, auf den Sie auf der Ansicht laufen können:

@model IEnumerable<string> 
<ul> 
    @foreach (var fullPath in Model) 
    { 
     var fileName = Path.GetFileName(fullPath); 
     <li>@fileName</li> 
    } 
</ul> 
+3

Wenn Sie Probleme bei der Suche nach _Server_ haben, überprüfen Sie diese Frage: [Kann Server.MapPath nicht verwenden] (http://StackOverflow.com/Questions/11105768/Cannot-use-Server-Mappath) – Alex

+0

Können Sie diese Dateien bereitstellen, indem Sie bereitstellen ein Link zum vollständigen Pfad, oder benötigen Sie einen Handler dafür? – JsonStatham

+0

@selectDistinct Nicht sicher, was Sie meinen. Server.MapPath konvertiert den virtuellen Pfad in einen physischen Verzeichnispfad. Natürlich benötigt der Prozess, der den Code ausführt, das Recht, auf diesen Pfad zuzugreifen. Das OP hat nach einer Liste von Dateien gefragt – slfan

Verwandte Themen