Eu estava pensando sobre a diferença entre \
e /
nos caminhos dos arquivos. Percebi que, às vezes, um caminho contém /
e às vezes é com ele \
.
Seria ótimo se alguém pudesse explicar quando usar \
e /
.
Eu estava pensando sobre a diferença entre \
e /
nos caminhos dos arquivos. Percebi que, às vezes, um caminho contém /
e às vezes é com ele \
.
Seria ótimo se alguém pudesse explicar quando usar \
e /
.
Respostas:
/
é o separador de caminho nos sistemas Unix e Unix-like. Windows moderno geralmente pode usar tanto \
e /
de forma intercambiável para filepaths, mas a Microsoft tem defendido o uso de \
como separador de caminho ao longo de décadas.
Isso é feito por razões históricas que datam da década de 1970, anteriores ao Windows por mais de uma década. No começo, o MS-DOS (a base do Windows inicial) não suportava diretórios. O Unix tinha suporte de diretório usando o/
personagem desde o início. No entanto, quando os diretórios foram adicionados no MS-DOS 2.0, a Microsoft e a IBM já estavam usando o /
caractere para opções de comando e, devido ao analisador leve do DOS (descendente do QDOS , projetado para executar em hardware de ponta), eles não conseguiram encontrar um maneira viável de usar o /
personagem sem quebrar a compatibilidade com os aplicativos existentes.
Portanto, para evitar erros sobre "falta de uma opção" ou "opção inválida" ao passar caminhos de arquivo como argumentos para comandos como estes:
cd/ <---- no switch specified
dir folder1/folder2 <---- /folder2 is not a switch for dir
foi decidido que o \
personagem seria usado em vez disso, para que você pudesse escrever esses comandos como este
cd\
dir folder1\folder2
sem erro.
Posteriormente, Microsoft e IBM colaboraram em um sistema operacional não relacionado ao DOS chamado OS / 2 . O OS / 2 tinha a capacidade de usar os dois separadores, provavelmente para atrair mais desenvolvedores do Unix. Quando a Microsoft e a IBM se separaram em 1990 , a Microsoft pegou o código que eles tinham e criou Windows NT , no qual todas as versões modernas do Windows se baseiam, levando consigo esse agnosticismo separador.
Como compatibilidade com versões anteriores tem sido o nome do jogo para a Microsoft de todas as principais transições de SO que eles realizaram (DOS para Win16 / DOS, Win16 / Win32, Win32 / WinNT), essa peculiaridade ficou emperrada e provavelmente existe por um tempo ainda.
É por esse motivo que essa discrepância existe. Realmente não deve ter efeito no que você está fazendo, porque, como eu disse, o WinAPI geralmente pode usá-los de forma intercambiável. No entanto, aplicativos de terceiros provavelmente serão interrompidos se você passar um /
quando eles esperam um \
entre nomes de diretório. Se você estiver usando o Windows, fique com \
. Se você estiver usando Unix ou URI (que têm como base os caminhos do Unix, mas isso é outra história), use /
.
No contexto do C #: Observe que, como essa é tecnicamente uma questão do C #, se você quiser escrever um código C # mais "portátil" que funcione no Unix e no Windows (mesmo que o C # seja predominantemente um idioma do Windows), você convém usar o Path.DirectorySeparatorChar
campo para que seu código use o separador preferido nesse sistema e use Path.Combine()
para anexar os caminhos corretamente.
Path.Combine
.
foo.exe /bar
pode ser interpretado como uma opção de linha de comando, enquanto foo.exe \bar
pode ser interpretado como uma referência a um arquivo / pasta chamado, bar
localizado no diretório raiz \
da "unidade" atual, como C:\
por exemplo.
/
para \
é feita na camada compat Win32, o que significa que, se você contorná-la, haverá uma diferença. O exemplo mais conhecido disso são os caminhos de comprimento estendidos: \\?\C:\
funcionará como esperado no NTFS, mas \\?\C:/
não.
/
e ` is not entirely true. For network path you have to use
`(por exemplo, \\ <servername> bot não // <servername>.)
MS-DOS 1.0 manteve a convenção de caracteres da opção de linha de comando (ou opção) de '/' do CP / M. Naquela época, não havia estrutura de diretórios no sistema de arquivos nem conflito.
Quando a Microsoft desenvolveu o ambiente mais semelhante ao Unix com o MS-DOS (e PC-DOS) 2.0, precisou representar o separador de caminho usando algo que não conflitasse com as opções de linha de comando existentes. Internamente, o sistema funciona igualmente bem com '/' ou '\'. O processador de comando (e muitos aplicativos) continuou usando o '/' como caractere de opção.
Uma CONFIG.SYS
entrada SWITCHAR=-
pode ser usada para substituir o /
padrão para melhorar a compatibilidade do Unix. Isso faz com que comandos internos e utilitários padrão usem o caractere alternativo. O separador de caminho do Unix pode então ser usado sem ambiguidade para nomes de arquivos e diretórios. Essa entrada foi removida em versões posteriores, mas uma chamada do DOS foi documentada para definir o valor após a inicialização.
Isso foi pouco usado e a maioria das ferramentas de terceiros permaneceu inalterada. A confusão persiste. Muitas portas das ferramentas Unix mantêm o caractere de switch '-' enquanto algumas suportam ambas as convenções.
O processador de comando subsequente do PowerShell implementa rigorosos parâmetros de escape e comutação e evita amplamente a confusão, exceto onde as ferramentas herdadas são usadas.
Nem a pergunta nem a resposta estão relacionadas ao C #.
/
como introdutor de opções em vários sistemas operacionais PDP-11, como RSTS (1970) e RSX (1972), precede o de CP / M (1973).
Em sistemas baseados em Unix, \
há um caractere de escape, isto é, \
informa ao analisador que este é um espaço e não o fim da instrução. Em sistemas Unix/
é o separador de diretório.
No Windows \
está o separador de diretório, mas /
não pode ser usado nos nomes de arquivo ou diretório.
\
e /
(assim como vários outros símbolos) não podem ser usados nos nomes de arquivos porque o DOS não possui o mesmo analisador complexo ao qual os usuários do Unix estão acostumados. A falta de um bom analisador foi o resultado de o MS-DOS descender do QDOS ("Sistema operacional rápido e sujo"). O objetivo era fazer com que as coisas funcionassem rapidamente e com hardware limitado. Tudo isso, obviamente, ainda existe nos dias atuais para compatibilidade com versões anteriores.
/
foi adicionado como um "
\
está correto no caminho do arquivo do Windows e/
correto no URI.Este pode ser um recurso relevante.
\
para /
automaticamente. No meu livro, isso é chamado de "funciona perfeitamente".
Além das respostas dadas, vale ressaltar que \
é amplamente utilizado para caracteres especiais (como\n
\t
) em linguagens de programação, editores de texto e sistemas gerais que aplicam análise lexical.
Se você estiver programando, por exemplo, às vezes é inconveniente precisar escapar da barra invertida com outra ( \\
) para usá-la corretamente - ou usar seqüências de escape, como C #@"\test"
.
Obviamente, como mencionado anteriormente, os URIs da Web usam barra padrão por padrão mas as duas barras funcionam nas ferramentas de linha de comando mais recentes e mais comuns.
ATUALIZAÇÃO: Depois de pesquisar um pouco, parece toda a história entre /
e \
remonta à "história do computador", na era do DOS e dos sistemas baseados em Unix da época. O HowToGeek tem um artigo interessante sobre essa história.
Em resumo, o DOS 1.0 foi lançado inicialmente pela IBM sem suporte a diretório e /
foi usado para outra funcionalidade de comando ("comutação"). Quando os diretórios foram introduzidos na versão 2.0, /
já estavam em uso, a IBM escolheu o símbolo visualmente mais próximo, que era \
. Por outro lado, o Unix é usado normalmente /
para diretórios.
Quando os usuários começaram a usar muitos sistemas diferentes, começaram a ficar confusos, fazendo com que os desenvolvedores do sistema operacional tentassem fazer com que os sistemas funcionassem nos dois casos - isso até se aplica à parte dos URLs, pois alguns navegadores suportam o http: \\ www.test. formato com \ go . Isso teve desvantagens, em geral, mas hoje a coisa toda ainda permanece por causas de compartimento atrasado, com uma tentativa de suporte de ambas as barras no Windows, mesmo que elas não sejam mais baseadas no DOS.
` as well as many
conchas make` ... você está certo que o Windows recente definiu a variável de ambiente ALTERNATE_PATH_SEPARATOR que o padrão /
é o Windows provavelmente pode aceitar os dois.
/
caminhos de suporte em todos os lugares do sistema - é claro, os aplicativos podiam entender mal esses caminhos à vontade, por isso não eram muito usados. Aplicativos não CLI que não tentaram fazer sua própria validação (quebrada) de caminhos funcionaram bem desde o início.
Você não deveria estar usando C #. Você sempre deve usar a Path
classe . Ele contém um método chamado Path.Combine
que pode ser usado para criar caminhos sem especificar você mesmo o separador.
Exemplo de uso:
string fullPath = System.IO.Path.Combine("C:", "Folder1", "Folder2", "file.txt");
\
é usado para caminhos de arquivos locais do Windows e caminhos de rede, como em:
C:\Windows\Temp\
ou \\NetworkSharedDisk\Documents\Archive\
/
é o que é exigido pelos URIs padrão, como em:
/
nos caminhos (pelo menos 7).
/
URIs padrão, como afirmei na resposta.