Domanda

Sembra che Windows insista nel scrivere una barra rovesciata \ nei percorsi dei file, mentre la classe URI di .NET li scrive con una barra /.Esiste un modo giusto, accettato anche nei sistemi più primitivi?E perché l'URI di .NET mostra l'altra barra rispetto al resto di Windows?

È stato utile?

Soluzione

Un percorso di file e un URI sono diversi. \ è corretto in un percorso di file di Windows e / è corretto in un URI.

Quindi questo percorso di file: C:\Documents\Foo si traduce in questo URI: file:///C:/Documents/Foo

Altri suggerimenti

Windows è il figlio bastardo dei sistemi operativi in ​​questo senso, ma molte API accettano anche le barre.Su Windows, il percorso di un file è simile al seguente:

C:\Users\jsmith\Documents\file.txt

Su un sistema simile a Unix (inclusi Mac OS X e Linux), lo stesso percorso sarebbe simile a questo:

/home/jsmith/Documents/file.txt

Un URL, standardizzato in RFC1738, Sempre utilizza le barre, indipendentemente dalla piattaforma:

http://home.example.com/Documents/file.txt

La ragione di ciò è storica.Nemmeno Windows può invertire la nostra visione degli URL.Quando parli di barre rovesciate, l'unica piattaforma che le utilizza è Windows (e alcune altre novità).

Dove potresti vedere barre rovesciate utilizzate diverse da Windows sarebbero percorsi UNC, tuttavia, Windows è anche il principale sostenitore di questi:

\\HOMESVR\Documents\file.txt

E qualunque cosa tu faccia, non creare uno spot pubblicitario per il tuo sito Web e dire "promozione della mia azienda punto com retro barra".

La ragione di questo è un piccolo pezzo di storia. Quando UNIX è stato creato, o dovrei dire piuttosto UNICS, hanno scelto il / come separatore per le directory. Torna nei giorni, supporti di memorizzazione era piuttosto piccola, e ogni directory nella root è stato montato un altro dispositivo di memorizzazione (/ bin / lib ecc)

Quando Microsoft rilascia MS-DOS versione 1.0, non ha avuto il supporto di directory. Hanno usato il carattere / per i parametri da programmi (programma / a / b)

MS-DOS 1.0, un breve rebrand di Q-DOS, è un / sistema CP M derivato operativo, dalla quale ha ereditato lettere di unità (A: C:. Etc)

Come nelle versioni successive hanno voluto aggiungere un po 'di supporto directory, hanno scelto di utilizzare il \ in quanto il / già avuto un altro significato nel loro sistema operativo.

Ci sono molti manufatti di storia del computer nei sistemi operativi moderni, che suppongo maggior parte delle persone non si rendono conto, ma hanno ancora una grande influenza su come funzionano.

Quindi, qual è la strada giusta? Se non v'è alcuna, direi che è l'/ perché i sistemi operativi UNIX-like erano lì fuori strada prima di Microsoft ha implementato il supporto di directory nella loro DOS.

Come nota a margine e parlando di .NET, è necessario utilizzare System.IO.Path.DirectorySeparatorChar per ottenere il separatore di percorso corrente.

Per quanto riguarda i separatori di percorso del file system andare, credo che su Windows tutti API accetterà le barre (ma forse ci sono alcuni tra quelli buggy che non) - il problema è che la maggior parte delle applicazioni non accettarle (o analizzare in modo non corretto).

In realtà, se non ricordo male, anche MS-DOS accettato '/' come un separatore di percorso a livello di API da quando è iniziato il sostegno sottodirectory (v2.0) - ma da quel momento il carattere '/' aveva già stato stabilito come il carattere 'interruttore' per le opzioni della riga di comando, in modo che il backslash è diventato il separatore di percorso de facto su DOS (e poi di Windows).

URI sono un animale simile ma diverso da percorsi di file e URI devono sempre utilizzare '/' a componenti separati. applicazioni e API di Windows probabilmente accettare '\' come un separatore in URI, probabilmente perché le persone hanno familiarità con l'utilizzo di backslash come separatore su quei sistemi e URI può anche essere utilizzato per rappresentare i file locali.


curiosità inutile del giorno - in alcune prime versioni di MS-DOS c'era un API per modificare la riga di comando carattere parametro di opzione (generalmente da '/' a '-'), in modo che i comandi potrebbero apparire più Unix-like e i comandi potrebbero accettare '/' come un separatore di percorso sulla linea di comando. L'API era meno di successo (credo perché non è stato universalmente supportato da applicazioni), ed è stato rimosso nelle versioni successive.

Hmm ... in seconda lettura, tutta questa risposta è praticamente inutile curiosità.

Windows utilizza la barra rovesciata (\) per il delimitatore di file system. Per tutto il resto viene utilizzato la barra (/). Il tipo di Uri utilizza la barra perché è così che un Uniform Resource Identifier è definito.

Il web si basa sul modo in cui UNIX di delimitare le directory in un percorso con una barra (/). Finestre separa le directory con i backslash (\)

Il modo giusto dipende da esso di utilizzo. Per un percorso di un file locale su una macchina Windows, utilizzare backslash. Per un percorso a una risorsa web o file che si trova su una macchina basata su UNIX (include Mac, Linux), utilizzare una barra.

Il motivo URI del .NET utilizza le barre è perché è la formattazione per l'utilizzo in un browser web.

Il server farà tutto il lavoro necessario per collegare le risorse di Internet per i file su un disco rigido.

di Windows accetta sia per il percorso.

Provare ad aprire Windows Explorer e digitare C:/Temp/Foo, c:\Temp\Foo saranno aperti correttamente.

\ Barra rovesciata è pericoloso, in quanto è necessario stare attenti con la fuga per tutto il tempo. Molti linguaggi di programmazione hanno un printf equivalente che utilizza backslash per sfuggire.

/ obliqua normale è per lo più innocui.

:. Colon era (e in una certa misura lo è ancora) utilizzato da Apple

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