c# - simbolo - Diferencia entre barra diagonal(/) y barra diagonal inversa(/) en la ruta del archivo
como poner slash inverso en laptop (7)
Me preguntaba sobre la diferencia entre
/
y
/
en las rutas de archivo.
He notado que a veces una ruta contiene
/
y otras veces está con
/
.
Sería genial si alguien puede explicar cuándo usar
/
y
/
.
Además de las respuestas dadas, vale la pena mencionar que
/
es ampliamente utilizado para caracteres especiales (como
/n
/t
) en lenguajes de programación, editores de texto y sistemas generales que aplican análisis léxico.
Si está programando, por ejemplo, a veces es inconveniente incluso necesitar escapar de la barra diagonal inversa con otro (
//
) para usarlo correctamente, o 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 en las últimas y más comunes herramientas de línea de comandos
.
ACTUALIZACIÓN: Después de buscar un poco, parece que toda la historia entre
/
y
/
se remonta al "historial de la computadora", en la época de DOS y los sistemas basados en Unix en ese momento.
HowToGeek
tiene un interesante
article
sobre esta historia.
En términos cortos, DOS 1.0 fue lanzado inicialmente por IBM sin soporte de directorio, y
/
se usó para otra funcionalidad de comando ("cambio").
Cuando los directorios se introdujeron 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 habitualmente
/
para directorios.
Cuando los usuarios comenzaron a usar muchos sistemas diferentes, comenzaron a confundirse, lo que hizo que los desarrolladores del sistema operativo intentaran hacer que los sistemas funcionen en ambos casos; esto incluso se aplica en la parte de las URL, ya que algunos navegadores admiten la prueba http: // www.test. com / go formato. Sin embargo, esto tenía inconvenientes en general, pero todo se mantiene en pie hoy por causas de compartimiento hacia atrás, con un intento de soporte de ambas barras en Windows, a pesar de que ya no se basan en DOS.
En los 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 declaración.
En sistemas Unix
/
es el separador de directorio.
En Windows
/
es el separador de directorio, pero
/
no se puede usar en nombres de archivo o directorio.
Tampoco deberías estar usando en C #.
Siempre debes usar la
clase
Path
.
Contiene un método llamado
Path.Combine
que puede usarse para crear rutas sin especificar el separador usted mismo.
Ejemplo de uso:
string fullPath = System.IO.Path.Combine("C:", "Folder1", "Folder2", "file.txt");
MS-DOS 1.0 retuvo la opción de línea de comando (o modificador) convención de caracteres de ''/'' de CP / M. En ese momento no había estructura de directorios en el sistema de archivos y no había conflicto.
Cuando Microsoft desarrolló el entorno más similar a Unix con MS-DOS (y PC-DOS) 2.0, necesitaban representar el separador de ruta utilizando algo que no entrara en conflicto con las opciones de línea de comando existentes. Internamente, el sistema funciona igualmente bien con ''/'' o ''/'. El procesador de comandos (y muchas aplicaciones) continuaron usando ''/'' como carácter de cambio.
Una entrada
CONFIG.SYS
SWITCHAR=-
podría usarse para anular
/
default para mejorar la compatibilidad con Unix.
Esto hace que los comandos integrados y las utilidades estándar utilicen el carácter alternativo.
El separador de ruta de Unix podría utilizarse sin ambigüedad para los nombres de archivo y directorio.
Esta entrada se eliminó en versiones posteriores, pero se documentó una llamada de DOS para establecer el valor después del arranque.
Esto se usó poco y la mayoría de las herramientas de terceros permanecieron sin cambios. La confusión persiste. Muchos puertos de herramientas Unix conservan el carácter de conmutador ''-'', mientras que algunos admiten ambas convenciones.
El siguiente procesador de comandos de PowerShell implementa escapes rigurosos y cambia parámetros y evita en gran medida la confusión, excepto donde se utilizan herramientas heredadas.
Ni la pregunta ni la respuesta se relacionan con C #.
/
es el separador de ruta en sistemas Unix y similares a Unix.
Windows moderno generalmente puede usar
/
y
/
indistintamente para rutas de archivos, pero Microsoft ha abogado por el uso de
/
como el separador de rutas durante décadas.
Esto se hace por razones históricas que se remontan a la década de 1970, anteriores a Windows en más de una década.
Al principio, MS-DOS (la base de principios de Windows) no admitía 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 carácter
/
para los
interruptores de comando
, y debido al analizador liviano de DOS (descendiente de
QDOS
, diseñado para ejecutarse en hardware de gama baja), no pudieron encontrar Una forma factible de utilizar el carácter
/
sin romper la compatibilidad con sus aplicaciones existentes.
Por lo tanto, para evitar errores sobre "falta un interruptor" o "interruptor no válido" al pasar rutas de archivo como argumentos a comandos como estos:
cd/ <---- no switch specified
dir folder1/folder2 <---- /folder2 is not a switch for dir
se decidió que se usaría el carácter
/
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 este agnosticismo 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 realizado (DOS a Win16 / DOS, a Win16 / Win32, a Win32 / WinNT), esta peculiaridad se mantuvo y probablemente 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á haciendo porque, como dije, el WinAPI generalmente puede usarlos indistintamente.
Sin embargo, las aplicaciones de terceros probablemente se romperán si pasa un
/
cuando esperan un
/
entre los nombres de directorio.
Si estás usando Windows, quédate con
/
.
Si está utilizando Unix o
URI
s (que tienen su base en las rutas de Unix, pero esa es otra historia completamente), entonces use
/
.
En el contexto de C #:
debe tenerse en cuenta, ya que esta
es
técnicamente una pregunta de C #, que si desea escribir más código C # "portátil" que funcione tanto en Unix como en Windows (incluso si C # es predominantemente un lenguaje de Windows), es posible que desee usar el campo
Path.DirectorySeparatorChar
para que su código use el separador preferido en ese sistema, y use
Path.Combine()
para agregar rutas correctamente.
/
se usa para rutas de archivos locales de Windows y rutas de red como en:
C:/Windows/Temp/
o
//NetworkSharedDisk/Documents/Archive/
/
es lo que requieren los URI estándar como en:
- Una URL, estandarizada en RFC 1738, siempre utiliza 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 invertidas.
- System.IO.Path.DirectorySeparatorChar para obtener el separador de ruta actual
This puede ser un recurso relevante.