web-dev-qa-db-fra.com

Vérifier si le fichier existe dans asp.net mvc 5

Je vérifie l'existence d'un fichier, mais ne le trouve pas, qu'il soit présent ou non 

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

Comment puis-je modifier le code pour vérifier l'existence du fichier correctement?

10
Arianule

System.IO.File fonctionnera si vous fournissez un chemin absolu ou relatif. Un chemin relatif ne sera pas relatif au dossier racine HTML, mais au répertoire de travail current. Le répertoire de travail en cours aura une valeur telle que C:\Program Files (x86)\IIS Express.

Le caractère ~ au début du chemin de fichier est uniquement interprété comme faisant partie du contexte ASP.NET actuel, ce que les méthodes File ne connaissent pas.

La méthode pour vous aider ici est HttpServerUtility.MapPath

Si vous êtes dans une méthode de contrôleur, vous pouvez appeler cette méthode sur l'objet HttpContext.Server, sinon (par exemple dans une vue), vous pouvez utiliser HttpContext.Current.Server.

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

Voici ma solution:

<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>
2
Abduhafiz

Exists () peut renvoyer false si l'application ne dispose pas des autorisations suffisantes pour accéder au fichier. Vous devez donc les accorder à appPool sur des dossiers et des fichiers spécifiques.

2
Darko

File.Exists () aura besoin du chemin complet . Essayez d'utiliser quelque chose comme:

@"C:\users\yourUsername\myDocuments\files\\downloads\" + fileCode + ".pdf" 

au lieu de:

"~/files/downloads/" + fileCode + ".pdf"

0
user8155123