Question

J'ai remarqué quelque chose de bizarre dans Server.MapPath().Si j'ai un dossier avec un espace à la fin, j'obtiens :

HttpException :Échec de la cartographie du chemin.

Cela fonctionne bien :Server.MapPath("/Folder1/Folder2/item.jpg")

Cela fonctionne bien :Server.MapPath("/Folder1/ Folder2/item.jpg")

Cela fonctionne bien :Server.MapPath("/Folder1/Fol der2/item.jpg")

Cela échoue ! :Server.MapPath("/Folder1/Folder2 /item.jpg")

Quelqu'un pourrait-il m'expliquer pourquoi un espace à la fin échoue alors qu'un espace ailleurs ne fonctionne pas ?

Note: Aucun des dossiers n'existe.

Était-ce utile?

La solution

Parce que tu je ne devrais pas:

Ne terminez pas un nom de fichier ou de répertoire par un espace ou un point.Bien que le système de fichiers sous-jacent puisse prendre en charge de tels noms, ce n'est pas le cas du shell Windows et de l'interface utilisateur.Cependant, il est acceptable de spécifier un point comme premier caractère d'un nom.Par exemple, « .temp ».

Le problème vient de la méthode FileUtil.IsSuspiciousPhysicalPath(string physicalPath, out bool pathTooLong), qui fait une comparaison :

string.Compare(physicalPath, Path.GetFullPath(physicalPath), StringComparison.OrdinalIgnoreCase) != 0;

Path.GetFullPath() supprimera les espaces de fin des noms de répertoires et de fichiers (car il appelle Path.NormalizePath() qui le fait), qui peut être découvert en appelant Path.GetFullPath(@"C:\Foo \Bar.txt") Par exemple.Puisque cela ne correspondra pas au chemin d’origine contenant les espaces, la méthode renverra true identifiant ainsi le chemin comme suspect, après quoi Server.MapPath lèvera l'exception.

Autres conseils

La méthode Mappath Mappe le chemin nominal ou virtuel spécifié vers le répertoire physique correspondant sur le serveur.La méthode ne vérifie pas si le chemin qu'il renvoie est valide ou existe sur le serveur.Vous devez utiliser la méthode Directory.exists () ou File.exists () pour vérifier si le répertoire ou le fichier existe déjà.

if (File.Exists(Server.MapPath(file)) 

En outre, connaissez également les caractères invlid pour la méthode:

Asterisk (*)
Point d'interrogation (?)
Supports d'angle ()
Virgule (,)
Colon ou semi-côon (: ou;)
Une citation simple ou double citation ('ou ")
Support carré droit (])
Double Slashes (// ou \)

espère que cela aide.

Edit

Configuration de Visual Studio 2010 pour entrer dans le code source Microsoft .NET

Utilisation de chose Post J'ai essayé de savoir ce qui est réellement Haopping in .NET FRAMWork lorsque nous utilisons la méthode genièvreCodageAcode après avoir débogué le code FRRAMWork de méthode après avoir débogué le code FRRAMWork de la méthode après avoir débogué le code FRRAMWork, j'ai trouvé des appels pour obtenir un chemin d'accès absolu à partir de fichiers et méthodes de framework

fichier - System \ web \ httpserverutilité.cs \ 1477467 \ httpserverutilité.cs Méthode -MAPPATH

fichier - \ System \ web \ virtualpath.cs \ 1477467 \ virtualpath.cs * méthode * - Créer

fichier -System \ web \ httprequest.cs \ 1599819 \ httpRequest.cs Méthode -MAPPATH

Mais j'ai trouvé que, avec le comportement de la Strage, il me renvoie null lorsque le chemin est / dossier1 / dossier2 /file.Cs mais pas réeutn null objet lors de la saisie / dossier1 / dossier2 / fichier.cs

Je monte que vous aimez prendre des framwork et voir ce qui ne passe-t-il

N'importe quel point de bonne question.mais toujours l'Anwser à cette question pourrait être donnée par Microsoft People uniquement qui conçoit des fichiers dans Framewok


Le problème est que ce n'est pas capable de localiser le dossier avecg Space I.e "Folder2" .not Not Valide et non capable de localiser ce dossier sur le système de fichiers.

Fondamentalement, vous ne trouvez aucun dossier sur le système de fichiers Windows qui a la sape après la nomenne.e à la fin ou au début.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top