Pergunta

Parece que o Windows insiste em escrever uma barra invertida \ em caminhos de arquivo, enquanto a classe URI do .NET os escreve com uma barra /.Existe algum caminho certo que seja aceito mesmo nos sistemas mais primitivos?E por que o URI do .NET mostra a outra barra em comparação com o restante do Windows?

Foi útil?

Solução

Um caminho de arquivo e um URI são diferentes. \ está correto em um caminho de arquivo do Windows e / está correto em um URI.

Então, este caminho de arquivo: C:\Documents\Foo traduz para este URI: file:///C:/Documents/Foo

Outras dicas

O Windows é o filho bastardo dos sistemas operacionais a esse respeito, mas muitas APIs também aceitarão slashes para a frente. No Windows, um caminho de arquivo se parece com o seguinte:

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

Em um sistema do tipo Unix (incluindo o Mac OS X e o Linux), o mesmo caminho ficaria assim:

/home/jsmith/Documents/file.txt

Um URL, padronizado em RFC 1738, sempre usa barras para a frente, independentemente da plataforma:

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

A razão para isso é histórica. Nem mesmo as janelas podem reverter nosso pensamento nos URLs. Quando você está falando sobre barras de barriga, a única plataforma que você encontrará que as usa é o Windows (e algumas outras novidades).

Onde você pode ver as barris usadas além do Windows seriam caminhos UNC - no entanto, o Windows também é o principal proponente deles:

\\HOMESVR\Documents\file.txt

E faça o que fizer, não faça um comercial para o seu site e diga "minha empresa com promoção de barra de back shash".

A razão para isso é um pequeno pedaço da história. Quando o Unix foi criado, ou devo dizer unidades, eles escolheram o / como separador para diretórios. Naquela época, a mídia de armazenamento era bastante pequena e todo diretório da raiz era outro dispositivo de armazenamento montado ( /bin /lib etc.)

Quando a Microsoft libera o MS-DOS versão 1.0, ele não tinha suporte ao diretório. Eles usaram o /personagem para parâmetros de programas (Program /A /B)

MS-DOS 1.0, uma rápida rebraia de Q-Dos, é um sistema operacional derivado de CP/M, do qual herdou letras de acionamento (A: C: etc.)

Como nas versões posteriores que eles queriam adicionar algum suporte de diretório, eles optaram por usar o , já que o / já tinha outro significado em seu sistema operacional.

Existem muitos artefatos da história dos computadores em sistemas operacionais modernos, que suponho que a maioria das pessoas não perceba, mas ainda tem uma grande influência sobre como elas funcionam.

Então, qual é o caminho certo? Se houver algum, eu diria que é o / porque os sistemas operacionais do tipo UNIX estavam lá fora, antes de a Microsoft implementar o suporte de diretórios em seu DOS.

Como uma nota lateral e falando sobre .NET, você deve usar System.IO.Path.DirectorySeparatorChar Para obter o separador de caminho atual.

No que diz respeito aos separadores de caminho do sistema de arquivos, acredito que no Windows todos APIs aceitarão barras (mas talvez existam algumas com erros que não aceitam) - o problema é que a maioria dos aplicativos não as aceita (ou as analisa incorretamente).

Na verdade, se bem me lembro, até o MS-DOS aceitou '/' como separador de caminho no nível da API desde que começou a suportar subdiretórios (v2.0) - mas naquela época o caractere '/' já havia sido estabelecido como o caractere 'switch' para opções de linha de comando, então a barra invertida se tornou o separador de caminho de fato no DOS (e posteriormente no Windows).

URIs são semelhantes, mas diferentes dos caminhos de arquivo, e URIs devem sempre usar '/' para separar componentes.Os aplicativos e APIs do Windows provavelmente aceitam '\' como separador em URIs, provavelmente porque as pessoas estão familiarizadas com o uso de barra invertida como separador nesses sistemas e os URIs também podem ser usados ​​para representar arquivos locais.


Curiosidades inúteis do dia - em algumas versões anteriores do MS-DOS havia uma API para alterar o caractere de troca de opção da linha de comando (geralmente de '/' para '-') para que os comandos pudessem parecer mais Unix e os comandos seriam aceite '/' como separador de caminho na linha de comando.A API não teve muito sucesso (acho que porque não era universalmente suportada pelos aplicativos) e foi removida em versões posteriores.

Hum...na segunda leitura, toda essa resposta é praticamente uma trivialidade inútil.

O Windows usa a barra de barriga (\) para o delimitador do sistema de arquivos. Para tudo o mais, a barra para a frente é usada (/). o Uri Tipo usa a barra para a frente, porque é assim que um Identificador de Recurso Uniforme é definido.

A Web é baseada na maneira Unix de delimitar diretórios em um caminho com uma barra (/). O Windows separa os diretórios com barragens ()

O caminho certo depende do seu uso. Para um caminho para um arquivo local em uma máquina Windows, use barra de barriga. Para um caminho para um recurso ou arquivo da Web localizado em uma máquina baseada em UNIX (inclui Macs, Linux), use uma barra.

O motivo. O URI do .NET usa barras para a frente é porque é formatador para uso em um webbrowser.

O servidor fará todo o trabalho necessário para vincular recursos da Web aos arquivos em um disco rígido.

O Windows aceita ambos para o caminho.

Tente abrir o Windows Explorer e digite C:/Temp/Foo, c:\Temp\Foo será aberto corretamente.

Backslash é perigoso, pois você precisa ter cuidado para escapar o tempo todo. Muitas linguagens de programação têm um equivalente a PrintF que usa barra de barra para escapar.

/ FrontSlash é principalmente inofensivo.

: Colon foi (e até certo ponto ainda é) usado pela Apple.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top