Então, qual é a direção certa da barra do caminho (/ ou \) no Windows?

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

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.

Portanto, este caminho de arquivo: C:\Documents\Foo traduz para este URI: file:///C:/Documents/Foo

O Windows é o filho bastardo dos sistemas operacionais nesse aspecto, mas muitas APIs também aceitam barras. No Windows, um caminho de arquivo é assim:

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

Em um sistema semelhante ao Unix (incluindo Mac OS X e Linux), o mesmo caminho seria assim:

 /home/jsmith/Documents/file.txt 

Um URL, padronizado no RFC 1738 , sempre usa barras, independentemente da plataforma:

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

A razão para isso é histórica. Nem mesmo o Windows pode reverter nosso pensamento em URLs. Quando você está falando sobre barras invertidas, a única plataforma que você vai encontrar é o Windows (e algumas outras novidades).

Onde você pode ver barras invertidas usadas diferentes 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 pontocom back slash promotion”.

A razão para isso é um pequeno pedaço da história. Quando o UNIX foi criado, ou devo dizer, UNICS, eles escolheram o separador / as para diretórios. Nos dias de hoje, a mídia de armazenamento era bem pequena, e todo diretório na raiz era outro dispositivo de armazenamento montado (/ bin / lib etc.)

Quando a Microsoft lança o MS-DOS versão 1.0, não tem suporte de diretório. Eles usaram o caractere / para parâmetros de programas (program / a / b)

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

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

Existem muitos artefatos da história do computador em sistemas operacionais modernos, que eu suponho que a maioria das pessoas não percebe, mas ainda tem uma grande influência em como eles funcionam.

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

Como uma nota secundária e falando sobre o .NET, você deve usar System.IO.Path.DirectorySeparatorChar para obter o separador de caminho atual.

Quanto aos separadores de caminhos do sistema de arquivos, acredito que no Windows todas as APIs aceitarão barras (mas talvez haja algumas que não funcionam) – o problema é que a maioria dos aplicativos não as aceita (ou as analisa incorretamente). ).

De fato, se bem me lembro, até o MS-DOS aceitou ‘/’ como um separador de caminho no nível da API desde que começou a suportar subdiretórios (v2.0) – mas nessa época o caractere ‘/’ já havia sido estabelecido como o caractere ‘switch’ das opções de linha de comando, portanto, a barra invertida se tornou o separador de caminho definido no DOS (e posterior no Windows).

Os URIs são um animal semelhante, mas diferente dos caminhos de arquivo, e os URIs devem sempre usar ‘/’ para separar componentes. Aplicativos e APIs do Windows provavelmente aceitam ‘\’ como um separador em URIs, provavelmente porque as pessoas estão familiarizadas com o uso da 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 opção de linha de comando (geralmente de ‘/’ para ‘-‘) para que os comandos parecessem mais semelhantes ao Unix e os comandos aceita ‘/’ como um separador de caminho na linha de comando. A API foi menos bem-sucedida (acho que não foi universalmente suportada pelos aplicativos) e foi removida em versões posteriores.

Hmm … na segunda leitura, toda esta resposta é inútil.

O Windows usa a barra invertida ( \ ) para o delimitador do sistema de arquivos. Para todo o resto, a barra é usada ( / ). O tipo Uri usa a barra 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 diretórios com barras invertidas (\)

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

A razão pela qual o URI do .NET usa barras é porque ele é formatado para uso em um navegador da web.

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

\ Backslash é perigoso, já que você precisa ter cuidado ao escaping o tempo todo. Muitas linguagens de programação têm um equivalente printf que usa barra invertida para escaping.

/ Frontslash é principalmente inofensivo.

: o cólon era (e até certo ponto ainda é) usado pela Apple.

O Windows aceita ambos por caminho.

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

Intereting Posts