2009-10-06 8 views

risposta

28

C:filename è un percorso valido ed è diverso da C:\filename. C:filename è il file filename nella directory corrente sull'unità C: mentre C:\filename è il file filename nella radice di tale unità. Apparentemente volevano mantenere la funzionalità di riferimento alla directory corrente su alcune unità.

Questo comportamento è descritto here in MSDN

+3

Si tratta di una presa-over da DOS 1.x IIRC ... :-) –

+3

Freaky ... questo è poco intuitivo. Qual è il modo per ottenere il valore atteso? 'Path.Combine (drive + @" \ ", path)'? – Gishu

+2

@Gishu - Non è intuitivo perché il modo in cui i percorsi funzionano nel sistema operativo Windows non è così semplice come si potrebbe pensare. Vedere l'articolo MSDN a cui mi sono collegato per trovare una descrizione di come funzionano i percorsi di Windows. Path.Combine() combina due percorsi. Non utilizzerei la concatenazione di stringhe nel modo in cui mi suggerisci perché ciò sconfigge l'intero scopo di Path.Combine(). AFAIC dovresti fare attenzione nel modo in cui specifichi i tuoi percorsi. Se intendi "C: \" usa quello, se OTOH intendi "C:" (che è diverso ma altrettanto valido), allora usa quello. –

5

MSDN non sembra spiegare perché, ma fornisce documentazione su quello che stai vedendo:

Path.Combine (path1 string, string path2)

Se path1 non è un'unità riferimento (ovvero "C:" o "D:") e non termina con un carattere separatore valido come definito in DirectorySeparatorChar, AltDirectorySeparatorChar o VolumeSeparatorChar, DirectorySeparatorChar viene aggiunto al percorso 1 prima della concatenazione.

Problemi correlati