Domanda

Ho notato qualcosa di strano in Server.MapPath().Se ho una cartella con uno spazio alla fine ottengo:

HttpException:Impossibile mappare il percorso.

Funziona bene:Server.MapPath("/Folder1/Folder2/item.jpg")

Funziona bene:Server.MapPath("/Folder1/ Folder2/item.jpg")

Funziona bene:Server.MapPath("/Folder1/Fol der2/item.jpg")

Questo fallisce!:Server.MapPath("/Folder1/Folder2 /item.jpg")

Qualcuno potrebbe spiegarmi perché uno spazio alla fine fallisce mentre uno spazio in qualsiasi altro posto no?

Nota: Nessuna delle cartelle esiste.

È stato utile?

Soluzione

Perché tu non dovrebbe:

Non terminare il nome di un file o di una directory con uno spazio o un punto.Sebbene il file system sottostante possa supportare tali nomi, la shell e l'interfaccia utente di Windows no.Tuttavia, è accettabile specificare un punto come primo carattere di un nome.Ad esempio, ".temp".

Il problema deriva dal metodo FileUtil.IsSuspiciousPhysicalPath(string physicalPath, out bool pathTooLong), che esegue un confronto:

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

Path.GetFullPath() taglierà gli spazi finali dai nomi di directory e file (perché chiama Path.NormalizePath() che lo fa), che può essere scoperto chiamando Path.GetFullPath(@"C:\Foo \Bar.txt") Per esempio.Poiché ciò non corrisponderà al percorso originale che contiene gli spazi, il metodo restituirà true identificando così il percorso come sospetto, dopodiché Server.MapPath genererà l'eccezione.

Altri suggerimenti

Il metodo Mappath mappa il percorso relativo o virtuale specificato nella directory fisica corrispondente sul server.Il metodo non controlla se il percorso ritorna è valido o esiste sul server.È necessario utilizzare la directory.exists () o file.exists () Metodo per verificare se la directory o il file esistono già.

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

Inoltre, sai anche che segue i caratteri invlidi per il metodo:

Asterisk (*)
Punto interrogativo (?)
Staffe angolari ()
Comma (,)
Colon o semi-colon (: o;)
Citazione singola o doppia citazione ('o ")
Staffa quadrata destra (])
Double Slashes (// o \)

Spero che ti aiuti.

modifica

Impostazione di Visual Studio 2010 per entrare in codice sorgente Microsoft .NET

Usando il post di cosa ho provato a scoprire cosa è in realtà haopping in .NET Framwork quando usiamo il metodo server.MapPath dopo il debug del codice .NET Fracwork ho scoperto le chiamate per ottenere il percorso assoluto dal percorso virtuale che passa a seguito di file e metodi di framework

File - System \ Web \ httpserverutility.cs \ 1477467 \ httpserververutility.cs Metodo -MappaH

File - \ System \ Web \ VirtualPath.cs \ 1477467 \ VirtualPath.cs * Method * - Crea

File -System \ Web \ httprequest.cs \ 1599819 \ httprequest.cs Metodo -MappaH

Ma l'ho trovato con il comportamento strano che mi restituisce null quando il percorso è / folder1 / folder2 /file.cs ma non reutn null oggetto quando inserisci / folder1 / folder2 / file.cs

I Hop ti piace entrare in framwork e vedere cosa happennen

Qualsiasi modo buona Domanda ..But ancora l'Anwser a questa domanda potrebbe essere dato da Microsoft Genti solo chi progettano i file in Framewok


.

Il problema è che non è in grado di individuare la cartella con Spazio Spazio I.e "FOLDER2". Non è valido e non è in grado di individuare questa cartella sul file system.

Fondamentalmente non trovi nessuna cartella sul file system di Windows che sta avendo SAPCE dopo nome NameI.e alla fine o in inizio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top