Diferencia entre barra diagonal (/) y barra invertida (\) en la ruta del archivo

Me preguntaba sobre la diferencia entre \ y / en las rutas de archivos. Me he dado cuenta de que a veces una ruta contiene / y algunas veces es con \ .

Sería genial si alguien puede explicar cuándo usar \ y / .

/ es el separador de ruta en Unix y sistemas de tipo Unix. Windows moderno generalmente puede usar \ y / intercambiablemente para filepaths, pero Microsoft ha abogado por el uso de \ como el separador de ruta durante décadas.

Esto se hace por razones históricas que datan de la década de 1970, precediendo a Windows por más de una década. Al principio, MS-DOS (la base de principios de Windows) no soportaba directorios. Unix tenía soporte de directorio usando el carácter / desde el principio. Sin embargo, cuando se agregaron directorios en MS-DOS 2.0, Microsoft e IBM ya estaban usando el / para los modificadores de comando , y debido al analizador liviano de DOS (descienden de QDOS , diseñado para ejecutarse en hardware inferior), no pudieron encontrar una forma factible de usar el carácter / sin romper la compatibilidad con sus aplicaciones existentes.

Por lo tanto, para evitar errores sobre “falta de un interruptor” o “interruptor no válido” al pasar rutas de archivos como argumentos a comandos como estos:

 cd/ <---- no switch specified dir folder1/folder2 <---- /folder2 is not a switch for dir 

se decidió que el carácter \ se usaría en su lugar, por lo que podría escribir esos comandos como este

 cd\ dir folder1\folder2 

sin error.

Más tarde, Microsoft e IBM colaboraron en un sistema operativo no relacionado con DOS llamado OS / 2 . OS / 2 tenía la capacidad de usar ambos separadores, probablemente para atraer a más desarrolladores de Unix. Cuando Microsoft e IBM se separaron en 1990 , Microsoft tomó el código que tenían y creó Windows NT , en el que se basan todas las versiones modernas de Windows, llevando consigo el agnosticismo de este separador.


Como la compatibilidad con versiones anteriores ha sido el nombre del juego para Microsoft de todas las principales transiciones del sistema operativo que han llevado a cabo (DOS a Win16 / DOS, a Win16 / Win32, a Win32 / WinNT), esta peculiaridad se atascó, y es probable que existir por un tiempo todavía.

Es por esta razón que existe esta discrepancia. Realmente no debería tener ningún efecto en lo que estás haciendo porque, como dije, el WinAPI en general puede usarlos indistintamente. Sin embargo, las aplicaciones de terceros probablemente se rompan si pasa un / cuando esperan un \ entre nombres de directorio. Si está usando Windows, quédese con \ . Si está utilizando Unix o URI s (que tienen su base en las rutas Unix, pero esa es otra historia), utilice / .


En el contexto de C #: debe tenerse en cuenta que, dado que técnicamente es una pregunta de C #, si desea escribir un código de C # más "portátil" que funcione tanto en Unix como en Windows (incluso si C # es predominantemente un lenguaje de Windows), podría querer usar el campo Path.DirectorySeparatorChar para que su código use el separador preferido en ese sistema, y ​​use Path.Combine() para anexar rutas correctamente.

MS-DOS 1.0 conservó la convención de caracteres de la línea de comando (o cambio) de ‘/’ de CP / M. En ese momento, no había una estructura de directorios en el sistema de archivos ni conflictos.

Cuando Microsoft desarrolló el entorno más parecido a Unix con MS-DOS (y PC-DOS) 2.0, necesitaron representar el separador de ruta utilizando algo que no entraba en conflicto con las opciones de línea de comando existentes. Internamente, el sistema funciona igual de bien con ‘/’ o ‘\’. El procesador de comandos (y muchas aplicaciones) continuaron usando el ‘/’ como un caracter de cambio.

Una entrada CONFIG.SYS SWITCHAR=- podría usarse para anular el / default para mejorar la compatibilidad de Unix. Esto hace que los comandos incorporados y las utilidades estándar usen el carácter alternativo. El separador de ruta de Unix podría utilizarse sin ambigüedad para los nombres de archivos y directorios. Esta entrada se eliminó en versiones posteriores, pero se documentó una llamada a DOS para establecer el valor después del arranque.

Esto se usó poco y la mayoría de las herramientas de terceros se mantuvieron sin cambios. La confusión persiste Muchos puertos de herramientas de Unix retienen el carácter de cambio ‘-‘, mientras que algunos admiten ambas convenciones.

El procesador de comandos PowerShell de continuación implementa parámetros de cambio y escape rigurosos y evita en gran medida la confusión, excepto cuando se usan herramientas heredadas.

Ni la pregunta ni la respuesta se relacionan con C #.

En sistemas basados ​​en Unix \ es un carácter de escape, es decir \ le dice al analizador que este es un espacio y no el final de la statement. En sistemas Unix / es el separador de directorio.

En Windows \ es el separador de directorios, pero / no se puede usar en nombres de archivos o directorios.

  • Una URL, estandarizada en RFC 1738, siempre usa barras diagonales, independientemente de la plataforma.
  • Una ruta de archivo y un URI son diferentes. \ es correcto en una ruta de archivo de Windows y / es correcto en un URI.
  • Varios navegadores (a saber, Firefox y Opera) fallan catastróficamente al encontrar URI con barras diagonales inversas.
  • System.IO.Path.DirectorySeparatorChar para obtener el separador de ruta actual

Este puede ser un recurso relevante.

Además de las respuestas dadas, vale la pena mencionar que \ se usa ampliamente para caracteres especiales (como \n \t ) en lenguajes de progtwigción, editores de texto y sistemas generales que aplican análisis léxico.

Si está progtwigndo, por ejemplo, a veces es inconveniente necesitar incluso escaparse de la barra invertida con otra ( \\ ) para usarla correctamente, o necesita usar cadenas de escape, como C # @"\test" .

Por supuesto, como se mencionó anteriormente, los URI web usan barra diagonal por estándar pero ambas barras funcionan con las últimas y más comunes herramientas de línea de comando .

ACTUALIZACIÓN: después de buscar un poco, parece que toda la historia entre / y \ se remonta a la “historia de la computadora”, en las edades de DOS y los sistemas basados ​​en Unix en ese momento. HowToGeek tiene un interesante artículo sobre esta historia.

A corto plazo, DOS 1.0 fue lanzado inicialmente por IBM sin soporte de directorio, y / se usó para otra funcionalidad de comando (“cambio”). Cuando se introdujeron los directorios en la versión 2.0, / ya estaba en uso, por lo que IBM eligió el símbolo visualmente más cercano, que era \ . Por otro lado, Unix utiliza de forma estándar / para directorios.

Cuando los usuarios comenzaron a usar muchos sistemas diferentes, empezaron a confundirse, lo que hizo que los desarrolladores del sistema operativo intentaran hacer que los sistemas funcionaran en ambos casos; esto incluso se aplica en la parte de las URL, ya que algunos navegadores son compatibles con http: \\ http://www.test. com \ go formato. Esto tuvo inconvenientes, aunque en general, pero todo sigue siendo hoy en día por causas de compartibilidad hacia atrás, con un bash de compatibilidad de ambas barras en Windows, a pesar de que ya no se basan en DOS.

No deberías estar usando tampoco en C #. Siempre debes usar la clase Path . Este contiene un método llamado Path.Combine que se puede usar para crear rutas sin especificar el separador usted mismo.

Ejemplo de uso:

 string fullPath = System.IO.Path.Combine("C:", "Folder1", "Folder2", "file.txt"); 

\ se usa para las rutas de red y rutas de archivos locales de Windows como en:

C:\Windows\Temp\ o \\NetworkSharedDisk\Documents\Archive\

/ es lo que requieren los URI estándar como en:

http://www.stackoverflow.com/

    Intereting Posts