Me preguntaba sobre la diferencia entre \
y /
en las rutas de archivo. Me he dado cuenta de que a veces un camino contiene /
y otras veces está con \
.
Sería genial si alguien puede explicar cuándo usar \
y /
.
Me preguntaba sobre la diferencia entre \
y /
en las rutas de archivo. Me he dado cuenta de que a veces un camino contiene /
y otras veces está con \
.
Sería genial si alguien puede explicar cuándo usar \
y /
.
Respuestas:
/
es el separador de ruta en Unix y sistemas similares a Unix. Windows moderno generalmente puede usar ambos \
e /
indistintamente para rutas de archivos, pero Microsoft ha abogado por el uso \
como 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 /
personaje 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 un forma factible de usar el /
personaje 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 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 \
personaje 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 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 nombre \
entre directorios. Si está utilizando Windows, quédese con \
. Si está utilizando Unix o URI (que tienen su base en las rutas de Unix, pero esa es otra historia completamente), entonces úselo /
.
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 Path.DirectorySeparatorChar
campo para que su código use el separador preferido en ese sistema y use Path.Combine()
para agregar rutas correctamente.
Path.Combine
.
foo.exe /bar
podría interpretarse como un interruptor de línea de comandos, mientras que foo.exe \bar
podría interpretarse como una referencia a un archivo / carpeta llamado bar
que se encuentra en el directorio raíz \
de la "unidad" actual, como C:\
por ejemplo.
/
a \
se realiza en la capa de compatibilidad de Win32, lo que significa que si lo evita, habrá una diferencia. El ejemplo más conocido de esto son las rutas de longitud extendida: \\?\C:\
funcionará como se espera en NTFS pero \\?\C:/
no lo hará.
/
y ` is not entirely true. For network path you have to use
`(por ejemplo, \\ <servername> bot not // <servername>)
MS-DOS 1.0 retuvo la opción de línea de comando (o modificador) convención de caracteres '/' 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 un carácter de cambio.
Se podría usar una CONFIG.SYS
entrada SWITCHAR=-
para anular el /
valor predeterminado 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 #.
/
un introductor de opciones en varios sistemas operativos PDP-11 como RSTS (1970) y RSX (1972) precede a CP / M (1973).
En los sistemas basados en Unix, \
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.
\
y /
(al igual que varios otros símbolos) no se pueden usar en nombres de archivo porque DOS no tenía el mismo analizador complejo al que los usuarios de Unix están acostumbrados. La falta de un buen analizador fue el resultado de que MS-DOS descendiera de QDOS ("Sistema operativo rápido y sucio"). Estaba destinado a hacer que las cosas funcionen rápidamente y en hardware limitado. Todo esto, por supuesto, todavía existe en la actualidad para la compatibilidad con versiones anteriores.
/
se agregó como "Alternate_Directory_Separator"
\
es correcto en una ruta de archivo de Windows y /
es correcto en un URI.Este puede ser un recurso relevante.
\
en /
forma automática. En mi libro esto se llama "funciona a la perfección".
Además de las respuestas dadas, vale la pena mencionar que \
se usa ampliamente 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 invertida con otro ( \\
) para usarlo 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 en las últimas y más comunes herramientas de línea de comandos.
ACTUALIZACIÓN: Después de buscar un poco, parece que la historia completa se remonta /
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 artículo 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 se usa de manera estándar /
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.
` as well as many
make` shells ... tienes razón en que Windows reciente ha definido la variable de entorno ALTERNATE_PATH_SEPARATOR que, por defecto /
, Windows probablemente pueda aceptar ambos.
/
rutas de soporte en todas partes del sistema; por supuesto, las aplicaciones podrían malinterpretar esas rutas en su tiempo libre, por lo que no se usó demasiado. Las aplicaciones que no son de CLI que no intentaron hacer su propia validación (interrumpida) de rutas funcionaron bien desde el principio.
No deberías usar ninguno en C #. Siempre debes usar la Path
clase . 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");
\
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:
/
en las rutas (al menos 7 lo hace).
/
URI estándar como lo he indicado en la respuesta.