Mi chiedevo la differenza tra \
e /
nei percorsi dei file. Ho notato che a volte un percorso contiene /
ea volte è con \
.
Sarebbe bello se qualcuno potesse spiegare quando usare \
e /
.
Mi chiedevo la differenza tra \
e /
nei percorsi dei file. Ho notato che a volte un percorso contiene /
ea volte è con \
.
Sarebbe bello se qualcuno potesse spiegare quando usare \
e /
.
Risposte:
/
è il separatore di percorso su sistemi Unix e Unix-like. Le moderne finestre possono generalmente utilizzare entrambi \
e in modo /
intercambiabile per i percorsi dei file, ma Microsoft ha sostenuto l'uso di \
come separatore dei percorsi per decenni.
Questo viene fatto per ragioni storiche risalenti agli anni '70, precedenti a Windows di oltre un decennio. All'inizio, MS-DOS (la base per i primi Windows) non supportava le directory. Unix aveva il supporto di directory usando il /
carattere sin dall'inizio. Tuttavia, quando le directory sono state aggiunte in MS-DOS 2.0, Microsoft e IBM stavano già utilizzando il /
carattere per le opzioni di comando e, a causa del parser leggero di DOS (discendente da QDOS , progettato per funzionare su hardware di fascia bassa), non riuscivano a trovare un modo fattibile per utilizzare il /
personaggio senza interrompere la compatibilità con le loro applicazioni esistenti.
Quindi, per evitare errori su "mancanza di uno switch" o "switch non valido" quando si passano percorsi di file come argomenti a comandi come questi:
cd/ <---- no switch specified
dir folder1/folder2 <---- /folder2 is not a switch for dir
fu deciso che il \
personaggio sarebbe stato usato invece, in modo da poter scrivere quei comandi in questo modo
cd\
dir folder1\folder2
senza errori.
Successivamente, Microsoft e IBM hanno collaborato a un sistema operativo non correlato a DOS chiamato OS / 2 . OS / 2 aveva la capacità di usare entrambi i separatori, probabilmente per attirare più sviluppatori Unix. Quando Microsoft e IBM si separarono nel 1990 , Microsoft prese il codice che avevano e creò Windows NT , su cui si basano tutte le versioni moderne di Windows, portando con sé questo agnosticismo separatore.
Poiché la compatibilità con le versioni precedenti è stata il nome del gioco per Microsoft da tutte le principali transizioni del sistema operativo che hanno intrapreso (da DOS a Win16 / DOS, a Win16 / Win32, a Win32 / WinNT), questa peculiarità è rimasta bloccata e probabilmente sarà esiste già da un po '.
È per questo motivo che esiste questa discrepanza. Non dovrebbe davvero avere alcun effetto su ciò che stai facendo perché, come ho detto, WinAPI può generalmente usarli in modo intercambiabile. Tuttavia, le applicazioni di terze parti probabilmente si interrompono se si passa a /
quando si aspettano una \
tra i nomi di directory. Se si utilizza Windows, attenersi a \
. Se stai usando Unix o URI (che hanno le loro basi nei percorsi Unix, ma questa è completamente un'altra storia), allora usa /
.
Nel contesto di C #: Va notato, dal momento che questa è tecnicamente una domanda C #, che se si desidera scrivere un codice C # più "portatile" che funziona sia su Unix che su Windows (anche se C # è prevalentemente un linguaggio Windows), si potrebbe essere necessario utilizzare il Path.DirectorySeparatorChar
campo in modo che il codice utilizzi il separatore preferito su quel sistema e utilizzarlo Path.Combine()
per aggiungere correttamente i percorsi.
Path.Combine
.
foo.exe /bar
potrebbe essere interpretato come un'opzione della riga di comando, mentre foo.exe \bar
potrebbe essere interpretato come riferito a un file / cartella chiamato bar
che si trova nella directory principale \
dell'attuale "unità", come C:\
ad esempio.
/
a \
viene eseguita nel livello compatibile Win32, il che significa che se si elude, ci sarà una differenza. L'esempio più noto di questo sono i percorsi di lunghezza estesa: \\?\C:\
funzionerà come previsto su NTFS ma \\?\C:/
non lo farà.
/
e ` is not entirely true. For network path you have to use
`(es. \\ <nomeserver> bot non // <nomeserver>)
MS-DOS 1.0 ha mantenuto l'opzione di riga di comando (o opzione) di carattere "/" da CP / M. A quel tempo non vi era alcuna struttura di directory nel file system e nessun conflitto.
Quando Microsoft ha sviluppato l'ambiente più simile a Unix con MS-DOS (e PC-DOS) 2.0, era necessario rappresentare il separatore di percorso utilizzando qualcosa che non fosse in conflitto con le opzioni della riga di comando esistenti. Internamente, il sistema funziona ugualmente bene con '/' o '\'. L'elaboratore di comandi (e molte applicazioni) ha continuato a utilizzare '/' come carattere switch.
È possibile utilizzare una CONFIG.SYS
voce SWITCHAR=-
per sovrascrivere il /
valore predefinito per migliorare la compatibilità con Unix. Questo fa sì che i comandi integrati e le utility standard utilizzino il carattere alternativo. Il separatore di percorso Unix potrebbe quindi essere utilizzato in modo inequivocabile per i nomi di file e directory. Questa voce è stata rimossa nelle versioni successive, ma è stata documentata una chiamata DOS per impostare il valore dopo l'avvio.
Questo era poco usato e la maggior parte degli strumenti di terze parti è rimasta invariata. La confusione persiste. Molte porte degli strumenti Unix mantengono il carattere "-" mentre alcuni supportano entrambe le convenzioni.
Il successivo processore di comandi PowerShell implementa rigorosi parametri di escape e switch ed evita in gran parte la confusione, tranne nel caso in cui vengano utilizzati strumenti legacy.
Né la domanda né la risposta si riferiscono a C #.
/
come introduttore di opzioni in vari sistemi operativi PDP-11 come RSTS (1970) e RSX (1972) precede quello in CP / M (1973).
Sui sistemi basati su Unix \
è presente un carattere di escape, ovvero \
indica al parser che si tratta di uno spazio e non della fine dell'istruzione. Sui sistemi Unix /
è il separatore di directory.
Su Windows \
è il separatore di directory, ma /
non può essere utilizzato nei nomi di file o directory.
\
e /
(così come molti altri simboli) non possono essere usati nei nomi dei file perché DOS non aveva lo stesso parser complesso a cui sono così abituati gli utenti Unix. La mancanza di un buon parser era il risultato del fatto che MS-DOS discendeva da QDOS ("Sistema operativo rapido e sporco"). Avrebbe dovuto far funzionare le cose rapidamente e su hardware limitato. Tutto ciò ovviamente esiste ancora oggi per la compatibilità con le versioni precedenti.
/
stato aggiunto come "Alternate_Directory_Separator"
\
è corretto in un percorso di file di Windows ed /
è corretto in un URI.Questa può essere una risorsa rilevante.
\
a /
automaticamente. Nel mio libro questo si chiama "funziona perfettamente".
A parte le risposte fornite, vale la pena ricordare che \
è ampiamente usato per caratteri speciali (come\n
\t
) in linguaggi di programmazione, editor di testo e sistemi generali che applicano l'analisi lessicale.
Se, ad esempio, stai programmando, a volte è scomodo persino dover sfuggire alla barra rovesciata con un'altra (\\
) per usarlo correttamente - o devi usare stringhe di escape, come C # @"\test"
.
Ovviamente, come accennato in precedenza, gli URI Web utilizzano la barra diretta di serie ma entrambe le barre funzionano con gli strumenti più recenti e più comuni della riga di comando.
AGGIORNAMENTO: Dopo aver cercato un po ', sembra che ci sia l'intera storia /
e \
risale alla "storia del computer", nell'era del DOS e dei sistemi basati su Unix a quel tempo. HowToGeek ha un articolo interessante su questa storia.
In breve, DOS 1.0 è stato inizialmente rilasciato da IBM senza supporto di directory ed è /
stato utilizzato per un'altra funzionalità di comando ("switching"). Quando le directory sono state introdotte nella versione 2.0, /
era già in uso, quindi IBM ha scelto il simbolo visivamente più vicino, che era \
. D'altra parte, Unix veniva utilizzato di norma /
per le directory.
Quando gli utenti hanno iniziato a utilizzare molti sistemi diversi, hanno iniziato a confondersi, facendo in modo che gli sviluppatori del sistema operativo tentassero di far funzionare i sistemi in entrambi i casi - questo vale anche nella parte degli URL, poiché alcuni browser supportano http: \\ www.test. formato com \ go . Ciò ha avuto degli inconvenienti, sebbene in generale, ma il tutto rimane fermo per cause di comparabilità all'indietro, con un tentativo di supporto di entrambe le barre su Windows, anche se non sono più basate su DOS.
` as well as many
make` shells ... hai ragione che Windows recente ha definito la variabile di ambiente ALTERNATE_PATH_SEPARATOR che di default è /
quindi Windows può probabilmente accettare entrambi.
/
percorsi di supporto ovunque nel sistema - ovviamente, le applicazioni potevano fraintendere quei percorsi a loro piacimento, quindi non venivano usati troppo. Le applicazioni non CLI che non hanno provato a eseguire la propria convalida (interrotta) dei percorsi hanno funzionato bene sin dall'inizio.
Non dovresti usare nessuno dei due in C #. Dovresti sempre usare la Path
classe . Questo contiene un metodo chiamato Path.Combine
che può essere utilizzato per creare percorsi senza specificare il separatore.
Esempio di utilizzo:
string fullPath = System.IO.Path.Combine("C:", "Folder1", "Folder2", "file.txt");
\
viene utilizzato per percorsi di file locali di Windows e percorsi di rete come in:
C:\Windows\Temp\
o \\NetworkSharedDisk\Documents\Archive\
/
è ciò che è richiesto dagli URI standard come in:
/
nei percorsi (almeno 7 lo fa).
/
URI standard come ho affermato nella risposta.