2015-09-01 16 views
5

Sto controllando l'esistenza di un file bu non riesce a trovarlo, a prescindere dal fatto che sia o noVerificare se il file esiste in asp.net mvc 5

if (System.IO.File.Exists("~/files/downloads/" + fileCode + ".pdf")) 
      { 
       return File("~/files/downloads/" + fileCode, "application/pdf", Server.UrlEncode(fileCode)); 
      } 
      else 
      { 
       return View("ErrorNotExistsView"); 
      } 

Come posso modificare il codice per controllare per l'esistenza del file correttamente?

+0

Cosa vuol dire "non può trovare"? Il codice inserisce la parte "se" o la parte "else"? – chiapa

+0

Entra nella parte else, indipendentemente dall'esistenza del file – Arianule

+1

sostituire "~" con HttpContext.Current.Server.MapPath (""); –

risposta

15

System.IO.File funzionerà se fornisci un percorso assoluto o un percorso relativo. Un percorso relativo non sarà relativo alla cartella radice HTML, ma la directory di lavoro corrente . La directory di lavoro corrente avrà un valore come C:\Program Files (x86)\IIS Express.

Il carattere ~ all'inizio del percorso del file viene interpretato solo come parte del contesto ASP.NET corrente, che i metodi File non conoscono.

Se siete in un metodo di controllo, è possibile utilizzare l'oggetto HttpContext.Server

var relativePath = "~/files/downloads/" + fileCode + ".pdf"; 
var absolutePath = HttpContext.Server.MapPath(relativePath); 
if(System.IO.File.Exists(absolutePath)) .... 
+0

Silly of me, thanks allo – Arianule

+0

Non sapevo che 'File.Exists()' funziona solo per percorsi assoluti, grazie – chiapa

+0

msdn per 'File.Exists' dice:" Il parametro path è permesso di specificare il percorso relativo o assoluto informazioni relative al percorso sono interpretate come relative alla directory di lavoro corrente. " –

2

exists() può restituire false se applicazione non dispone di autorizzazioni sufficienti per accedere al file. Quindi dovresti concederle a appPool su cartelle e file specifici.

0

Ecco la mia soluzione:

<span> 
@{ 
    var profileImg = "/Images/" + User.Identity.GetUserId() + ".jpg"; 
    var absolutePath = HttpContext.Current.Server.MapPath(profileImg); 
    if (System.IO.File.Exists(absolutePath)) 
    { 
     <img alt="image" width="50" height="50" class="img-circle" src="@profileImg" /> 
    } 
    else 
    { 
     <img alt="image" width="50" height="50" class="img-circle" src="~/Images/profile_small.jpg" /> 
    } 
} 
</span>