¿Cuál es el estándar de nomenclatura para los componentes de la ruta?
Sigo enredándome cuando manipulo rutas y nombres de archivos porque no sigo un estándar de nomenclatura para los componentes de las rutas.
Considere el siguiente problema de juguete (ejemplo de Windows, pero es de esperar que la respuesta sea independiente de la plataforma). Se le ha proporcionado la ruta de una carpeta:
C:\Users\OddThinking\Documents\My Source\
Desea recorrer las carpetas que se encuentran debajo y compilar todos los archivos .src en archivos .obj.
En algún momento estás viendo la siguiente ruta:
C:\Users\OddThinking\Documents\My Source\Widget\foo.src
¿Cómo nombrarías los siguientes componentes de la ruta?
A. foo
B. foo.src
C. src
D. .src
E. C:\Users\OddThinking\Documents\My Source\ (absolute path of the root)
F. Widget\foo.src (relative path of the file to absolute path of the root)
G. Widget\
H. C:\Users\OddThinking\Documents\My Source\Widget\
I. C:\Users\OddThinking\Documents\My Source\Widget\foo.src
Aquí está mi intento:
A. ¿Nombre base? ¿Nombre base?
B. ¿Nombre del archivo? ¿Nombre del archivo?
La diferencia es importante a la hora de elegir nombres de identificadores y nunca soy coherente en este aspecto.
C. ¿Extensión?
D. ¿Extensión? Espera, eso es lo que llamé C. ¿
Debo evitar almacenar el punto y simplemente colocarlo cuando sea necesario?
¿Qué pasa si no hay ningún punto en un archivo en particular?
E.?
F.?
G. ¿Carpeta? ¿Pero no es este un término específico de Windows?
H. ¿Nombre de la ruta? ¿Nombre de ruta? ¿Camino?
I. ¿Nombre del archivo? Espera, así es como llamé B. ¿
Nombre de ruta? Espera, así es como llamé H.
Creo que su búsqueda de una convención de nomenclatura "estándar" será en vano. A continuación se presentan mis propuestas, basadas en programas existentes y conocidos.
A) C:\users\OddThinking\Documents\My Source\Widget\foo.src
---
Vim lo llama raíz de archivo (: ayuda modificadores de nombre de archivo)
B) C:\users\OddThinking\Documents\My Source\Widget\foo.src
-------
nombre de archivo o nombre base
C) C:\users\OddThinking\Documents\My Source\Widget\foo.src
___ (without dot)
extensión de archivo/nombre
D) C:\users\OddThinking\Documents\My Source\Widget\foo.src
____ (with dot)
también extensión de archivo . Simplemente almacene sin el punto, si no hay ningún punto en un archivo, no tiene extensión
E) C:\users\OddThinking\Documents\My Source\Widget\foo.src
-----------------------------------------
parte superior del árbol
Sin convención, git lo llama directorio base
F) C:\users\OddThinking\Documents\My Source\Widget\foo.src
--------------
camino desde la cima del árbol hasta la hoja
camino relativo
G) C:\users\OddThinking\Documents\My Source\Widget\foo.src
------
un nodo del árbol
sin convención, tal vez un directorio simple
H) C:\users\OddThinking\Documents\My Source\Widget\foo.src
------------------------------------------------
nombre del directorio
I) C:\users\OddThinking\Documents\My Source\Widget\foo.src
-------------------------------------------------------
camino completo/absoluto
Buena pregunta primero que nada, mi +1. Esto me molestó cuando tuve que crear una serie de funciones en la clase Utilidad una vez. Obtener nombre de archivo? o ObtenerNombreCompleto? ¿GetApplicationPath significa ruta completa o el nombre del directorio? etcétera. Vengo de .NET, así que creo que puedo agregar poco más a la excelente respuesta de @blinry.
Resumen: (En cursiva es lo que no usaría como programador)
Ruta : La ruta especifica una ubicación única en el sistema de archivos (a menos que sea una ruta relativa). El nombre de la ruta se usa con menos frecuencia, pero yo me quedaría con la ruta: explica bastante bien qué es. La ruta puede apuntar a un archivo o una carpeta o incluso a nada (C:\). El camino puede ser:
- Ruta relativa :
My Source\Widget\
es una ruta relativa y tambiénWidget\foo.src
. Autoexplicativo. - Ruta Absoluta o Ruta Completa : Es la ruta totalmente calificada que apunta al objetivo. Tiendo a utilizar este último con más frecuencia.
C:\users\OddThinking\Documents\My Source\Widget\foo.src
es por tanto camino completo. Vea al final lo que yo llamo ruta completa que apunta a un archivo y que termina en un directorio.
La página wiki y el nombre .NET para la ruta son consistentes.
- Ruta relativa :
Ruta raíz o directorio raíz : la primera es la convención .NET, mientras que la segunda se escucha más en los círculos de UNIX. Aunque me gustan ambos, tiendo a usar más el primero. En Windows, a diferencia de UNIX, tiene muchas rutas raíz diferentes, una para cada partición. Los sistemas Unix tienen un directorio raíz que contiene información sobre otros directorios y archivos. P.ej.
C:\
es la ruta raíz.Carpeta o Nombre de carpeta :
Widget
,OddThinking
etc en su caso. Esta podría ser una convención exclusiva de Windows (de hecho, es mi forma de pensar extraña :)), sin embargo, me opongo firmemente a la respuesta "Directorio" de Blinry. Aunque para un usuario normal directorio significa lo mismo que una carpeta (como subcarpetas, subdirectorios), creo que desde un ángulo técnico "directorio" debería sonar como una dirección calificada para el objetivo y no como el objetivo en sí. Más abajo.- Subcarpetas : Con respecto a
users
OddThinking
yDocuments
son subcarpetas. - Subdirectorios : Con respecto a
users
OddThinking\
,OddThinking\Documents\
yOddThinking\Documents\My Source\Widget\
son subdirectorios. Pero no siempre necesitamos preocuparnos por eso, ¿verdad? - Carpeta secundaria : con respecto a
users
OddThinking
una carpeta secundaria (así como una subcarpeta) - Carpeta principal :
OddThinking
users
es su carpeta principal (solo menciono diferentes terminologías, no es gran cosa).
- Subcarpetas : Con respecto a
Directorio o nombre de directorio : el primero para usar generalmente en la vida real, el segundo para estar en código. Esto se refiere a la ruta completa (o simplemente ruta completa ) hasta la carpeta principal del destino . En su caso,
C:\users\OddThinking\Documents\My Source\Widget
(Sí, un directorio nunca debe apuntar a un archivo). Utilizo el nombre del directorio en mi código ya que el directorio es una clase en .NET y el nombre del directorio es como lo llama la biblioteca. Es bastante consistente con el nombre de directorio utilizado en los sistemas UNIX.Nombre de archivo o nombre base : nombre del archivo junto con la extensión. En tu caso:
foo.src
. Yo diría que para un uso no técnico prefiero el nombre del archivo (es lo que significa para un usuario final), pero para fines técnicos me quedaría estrictamente con basename . MS utiliza a menudo el nombre de archivo, pero me sorprende cómo no son consistentes no solo en la documentación sino incluso en la biblioteca . El nombre del archivo podría significar el nombre base o la ruta completa del archivo. Así que prefiero el nombre base, así es como los llamo en código. Esta página en la wiki también dice que el nombre del archivo podría significar la ruta completa o el nombre base. Sorprendentemente, incluso en .NET puedo encontrar que el nombre base de uso significa el nombre raíz del archivo.Extensión o Extensión de nombre de archivo o Extensión de archivo : Me gusta el último. ¡Todo se refiere a lo mismo pero qué es nuevamente es un tema de debate! Wiki dice que es
src
cuando recuerdo haber leído que muchos de los idiomas lo interpretan como.src
. Tenga en cuenta el punto. Entonces, una vez más, mi opinión es que, para usos ocasionales, no importa lo que sea, pero como programador siempre veo la extensión como.src
.Ok, podría haber intentado buscar algunos usos estándar, pero estas son dos de las convenciones que sigo. Y se trata de caminos completos.
Generalmente llamo ruta de archivo a una ruta completa que apunta a un archivo . Para mí, la ruta del archivo es clara, me dice qué es. Aunque con nombre de archivo lo encuentro como el nombre del archivo, en mi código lo llamo nombre de archivo . También es coherente con " nombre de directorio ". Desde el punto de vista técnico, ¡nombre se refiere al nombre completo! Es frustrante que .NET use el término nombre de archivo (así que tengo mi caso aquí) y, a veces, ruta de archivo para esto.
Llamo directorio a una ruta completa que termina como directorio. De hecho, se puede llamar directorio a cualquier dirección que no apunte a un archivo. También lo
C:\users\OddThinking\Documents\My Source\
es un directorio,C:\users\OddThinking\
es un directorio o inclusoOddThinking\Documents\My Source\
(mejor llamarlo subdirectorio o incluso mejor ruta relativa; todo eso depende del contexto en el que esté tratando). Bien arriba mencioné algo diferente sobre el directorio, que es el nombre del directorio. Esta es mi opinión: obtendré un nuevo camino para evitar confusiones. Qué es estoD:\Fruit\Apple\Pip\
? Un directorio. Pero si la pregunta es cuál es el directorio o, mejor aún, el nombre del directorioD:\Fruit\Apple\Pip\
, la respuesta esD:\Fruit\Apple\
. Espero que esté claro.
Yo diría que es mejor no preocuparse por los dos últimos términos, ya que son los que crean la mayor confusión (para mí personalmente). ¡ Simplemente use el término ruta completa !
Para responderte:
con respecto al camino que has dado
R) Ni idea. De todos modos, nunca necesité tener eso solo.
B) nombre base
C) Por el momento simplemente lo llamaría extensión de archivo, lo que menos me preocupa es que nunca necesité que solo se nombrara eso en mi código.
D) extensión de archivo seguramente.
E) No creo que este sea un requisito de propósito general. Ni idea. En .NET, el directorio base es el mismo que el nombre del directorio.
F) camino relativo
G) carpeta (carpeta principal al nombre base
foo.src
)H) nombre del directorio
I) ruta completa (o incluso nombre de archivo)
en general (perdón por ser un poco detallado, solo para aclarar el punto) pero suponiendo que
foo.src
de hecho sea un archivoA) NA
B) nombre base
C) NA
d) extensión
E) directorio o simplemente ruta
F) camino relativo
G) NA
H) directorio o simplemente ruta
I) ruta completa (o incluso nombre de archivo)
Continuando con un ejemplo de mi parte:
Considere el camino
C:\Documents and Settings\All Users\Application Data\s.sql
.C:\Documents and Settings\All Users\Application Data\s.sql
es la ruta completa (que es un nombre de archivo)C:\Documents and Settings\All Users\Application Data\
es el nombre del directorio.
Ahora considere el camino
C:\Documents and Settings\All Users\Application Data
C:\Documents and Settings\All Users\Application Data
es la ruta completa (que resulta ser un directorio)C:\Documents and Settings\All Users
es el nombre del directorio.
Dos consejos míos:
Sigo esta regla general de que cuando se trata de direccionar una dirección completa independientemente de su tipo, casi siempre la llamo "ruta completa". Esto no solo elimina el uso de dos terminologías para la ruta del archivo y la ruta de la carpeta, sino que también evita la posible confusión si va a nombrar el archivo como nombre de archivo (que para la mayoría de los usuarios se traduce inmediatamente como nombre base). Pero sí, si tiene que ser específico sobre el tipo de ruta, es mejor nombrar el nombre del archivo o el directorio en lugar de una "ruta" más genérica.
Sea lo que sea, tienes tu propia idea en mente, sé coherente con ella en todo momento. Tenga un consenso entre los miembros del equipo de que esto significa esto y no aquello.
Ahora que recién desde el círculo tengo algo de práctica. Una nueva marca de términos sería la que se utiliza en las máquinas OS X y Android. Y todo esto se trata solo de rutas físicas en el sistema de archivos. En el caso de las direcciones web, surgiría un conjunto completamente nuevo de terminologías. Espero que alguien llene el vacío en este mismo hilo :) Me encantaría escuchar la convención con la que has seguido adelante.
En C++, Boost.Filesystem ha ideado una nomenclatura para las distintas partes de una ruta. Consulte la documentación de referencia sobre descomposición de rutas para obtener más detalles, así como este tutorial .
Aquí hay un resumen basado en el tutorial. Para:
- Ruta de Windows:
c:\foo\bar\baa.txt
- Ruta Unix:
/foo/bar/baa.txt
usted obtiene:
Part Windows Posix
-------------- --------------- ---------------
Root name c: <empty>
Root directory \ /
Root path c:\ /
Relative path foo\bar\baa.txt foo/bar/baa.txt
Parent path c:\foo\bar /foo/bar
Filename baa.txt baa.txt
Stem baa baa
Extension .txt .txt
Estándar C++ISO/IEC 14882:2017
Además, la terminología Boost.Filesystem ha sido adoptada por C++ 17 => Verstd::filesystem
Function name Meaning
---------------- -------------------------------
root_name() Root-name of the path
root_directory() Root directory of the path
root_path() Root path of the path
relative_path() Path relative to the root path
parent_path() Path of the parent path
filename() Path without base directory (basename)
stem() Filename without extension
extension() Component after last dot