Sigo haciendo nudos cuando manipulo rutas y nombres de archivos, porque no tengo un sistema de nombres común que utilizo.
Necesito encontrar un estándar de nomenclatura y apegarme a él, y me gustaría ser claro y consistente con los demás, así que me estoy abriendo para aprender las respuestas canónicas.
Considere este problema de juguete: (ejemplo de Windows, pero espero que la respuesta sea independiente de la plataforma)
Se le ha dado el nombre completo de una carpeta: C: \ users \ OddThinking \ Documents \ My Source. Desea recorrer las carpetas debajo y compilar todos los archivos .src a .obj.
En algún momento estás viendo la siguiente cadena.
C:\users\OddThinking\Documents\My Source\Widget\foo.src
Entonces, ¿qué nombres de identificadores usarías para las partes?
A) foo
B) foo.src
C) src
D) .src
E) C:\users\OddThinking\Documents\My Source\ - i.e. the top of the tree.
F) Widget\foo.src - i.e. the path from the top of the tree to the leaf.
G) Widget - i.e. one node of the tree.
H) C:\users\OddThinking\Documents\My Source\Widget\ - i.e. the name of the folder
I) C:\users\OddThinking\Documents\My Source\Widget\foo.src
Déjame darte algunas respuestas, para que comiences.
A) nombre base?
B) nombre del archivo? ¿O es nombre de archivo? La diferencia es importante al elegir nombres de identificadores, y nunca soy coherente aquí.
C) Extensión
D) Extensión. Espera, eso es lo que llamé C. ¿Debo evitar almacenar el punto y simplemente ponerlo cuando sea necesario? ¿Qué pasa si no hay punto en un archivo en particular?
H) nombre de ruta? O espera, ¿es solo el camino?
I) nombre de archivo. Espera, eso es lo que llamé C. Path. Espera, eso es lo que llamé H. Quizás H debería ser el nombre de la carpeta. Sin embargo, ¿no es "carpeta" un término específico de Windows?
fuente
stem
.Respuestas:
Creo que su búsqueda de una convención de nomenclatura "estándar" será en vano. Aquí están mis propuestas, basadas en programas existentes y conocidos:
A) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src
B) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
C) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo. src (sin punto)
D) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src (con punto)
E) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
F) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
G) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
H) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
I) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
fuente
1.
(nombre de archivo solo sin extensión), decidí hacerloFile Title
hace mucho tiempo debido a la falta de una convención clara o al menos un consenso global.A
(nombre de archivo sin extensión), puede usarstem
. Referencias: doc.rust-lang.org/std/path/struct.Path.html#method.file_stem , llvm.org/docs/doxygen/html/… , boost.org/doc/libs/1_60_0/libs/filesystem/ doc / ...Buena pregunta en primer lugar, mi +1. Esto me molestó cuando tuve que crear una serie de funciones en la clase Utility una vez. GetFileName? o GetFullName? GetApplicationPath significa ruta completa o el nombre del directorio? y así. Vengo de .NET, así que creo que puedo agregar un 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 me quedaría con la ruta, explica más o menos lo que es. La ruta puede apuntar a un archivo o una carpeta o incluso a nada (C: \). El camino puede ser:
My Source\Widget\
es la ruta relativa, así comoWidget\foo.src
. Autoexplicativo.C:\users\OddThinking\Documents\My Source\Widget\foo.src
Es por lo tanto camino completo. Vea al final lo que llamo ruta completa que apunta a un archivo y que termina como un directorio.La página wiki y los nombres .NET para la ruta son consistentes.
Ruta raíz o directorio raíz : El primero es la convención .NET, mientras que el segundo se escucha más en los círculos UNIX. Aunque me gustan los dos, tiendo a usar el primero más. 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ízCarpeta o nombre de carpeta :
Widget
,OddThinking
etc en su caso. Esta podría ser una convención exclusiva de Windows (de hecho, es mi propio pensamiento extraño :)), sin embargo, me opongo firmemente a la respuesta "directorio" de blinry. Aunque para un directorio de usuario normal significa lo mismo que una carpeta (como subcarpetas, subdirectorios), creo que desde un ángulo técnico el "directorio" debería sonar como una dirección calificada para el objetivo y no el objetivo en sí. Más abajo.users
OddThinking
yDocuments
son subcarpetas.users
OddThinking\
,OddThinking\Documents\
yOddThinking\Documents\My Source\Widget\
son subdirectorios. Pero a menudo no necesitamos preocuparnos por eso, ¿verdad?users
OddThinking
secundaria : con respecto a es una carpeta secundaria (así como una subcarpeta)OddThinking
users
es su carpeta principal (solo mencionando diferentes terminologías, no es gran cosa).Directorio o nombre de directorio : el primero para usar generalmente en la vida real, el último para estar en código. Esto se refiere a la ruta completa (o simplemente a la 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 lo que la propia biblioteca lo llama. 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 su caso:
foo.src
. 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 limitaría estrictamente a basename . El nombre de archivo a menudo es utilizado por MS, pero me sorprende que no sean consistentes no solo en la documentación sino incluso en la biblioteca . Su nombre de archivo puede significar nombre base o ruta completa del archivo. Así que estoy a favor de basename, así es como los llamo en código. Esta página en 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 el nombre base de uso que 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 lo que es nuevamente es un tema de debate! Wiki dice que es
src
entonces 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, para usos casuales, no importa lo que sea, pero como programador siempre veo la extensión como.src
.Ok, podría haber intentado obtener algunos usos estándar, pero aquí hay dos de mis convenciones que sigo. Y se trata de caminos completos.
Generalmente llamo a una ruta completa que apunta a un archivo como ruta de archivo . Para mí, la ruta del archivo es clara, me dice qué es. Aunque con el nombre del archivo lo encuentro como el nombre del archivo, en mi código lo llamo nombre del archivo . También es consistente con el " nombre del directorio ". Desde el punto de vista técnico, el nombre se refiere al nombre completamente calificado. Frustrantemente .NET usa el término nombre de archivo (así que tengo mi caso aquí) y, a veces, la ruta del archivo para esto.
Llamo a una ruta completa que termina como un directorio un directorio. De hecho, uno puede llamar a cualquier dirección que no apunte a un archivo un directorio. Entonces,
C:\users\OddThinking\Documents\My Source\
es un directorio,C:\users\OddThinking\
es un directorio o inclusoOddThinking\Documents\My Source\
(es mejor llamarlo subdirectorio o incluso una ruta relativa mejor, todo eso depende del contexto con el que se está tratando). Más arriba mencioné algo diferente sobre el directorio, que es el nombre del directorio. Aquí está 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 incluso mejor nombre de directorioD:\Fruit\Apple\Pip\
, la respuesta esD:\Fruit\Apple\
. Espero que sea claro.Diría que es mejor no preocuparse por los dos últimos términos, ya que eso es lo que crea la mayor confusión (para mí personalmente). ¡Solo usa el término ruta completa !
Para responderte:
con respecto al camino que has dado
A) Ni idea. De todos modos, nunca necesité conseguir eso solo.
B) nombre base
C) Simplemente lo llamaría extensión de archivo por el momento, estoy menos preocupado ya que nunca necesité que solo se mencionara 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 el directorio base .NET es lo mismo que el nombre del directorio.
F) camino relativo
G) carpeta (carpeta principal para 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 llevar el punto a casa), pero suponiendo que
foo.src
es realmente 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)
Más conducción con un ejemplo de mi lado:
Considera 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 directorioAhora considera 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 directorioDos 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 nombre del 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 directorio en lugar de una "ruta" más genérica.
Sea lo que sea, tendrá su propia idea en mente, sea coherente con ella en todo momento. Tener un consenso entre los miembros del equipo de que esto significa esto y no eso.
Ahora que solo desde el círculo tengo algo de práctica. Una nueva marca de términos sería lo que se usa en las máquinas con OS X y Android. Y todo esto se trata solo de rutas físicas en el sistema de archivos. Surgiría un nuevo conjunto de terminologías en el caso de las direcciones web. Espero que alguien llene el vacío en este mismo hilo :) Me alegraría escuchar la convención con la que ha seguido.
fuente
En C ++, Boost.Filesystem ha ideado una nomenclatura para las diversas partes de una ruta. Consulte la documentación de referencia de descomposición de ruta para obtener detalles, así como este tutorial .
Aquí hay un resumen basado en el tutorial. Por:
c:\foo\bar\baa.txt
/foo/bar/baa.txt
usted obtiene:
C ++ estándar ISO / IEC 14882: 2017
Además, la terminología de Boost.Filesystem ha sido adoptada por C ++ 17 => Ver
std::filesystem
fuente
path
,fullpath
?stem()
es parte del nombre del archivo , no de la ruta .La
pathlib
biblioteca estándar de Python tiene una gran convención de nomenclatura para componentes de ruta: https://docs.python.org/3/library/pathlib.htmla) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src
b) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
c) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo. src (sin punto)
d) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src (con punto)
e) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
f) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
g) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
h) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
i) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
fuente
No, no estás loco.
En los sistemas Windows, a veces la ruta del directorio que contiene el archivo se llama ruta , que es como era desde el principio. Así por ejemplo,
El enfoque de Unix / Linux es mucho más lógico, y eso es lo que todos mencionaron anteriormente: ruta que incluye el nombre del archivo en sí. Sin embargo, si escribe "call /?" en la línea de comando de Windows, obtienes esto:
Así que ahí está, "solo ruta" y "solo nombre de archivo". Al mismo tiempo, se refieren a la cadena completa como "nombre de ruta totalmente calificado", que se entiende como letra de unidad más ruta más nombre de archivo. Entonces no hay una verdad real. Es inútil Has sido traicionado.
De todas formas,
Para responder tu pregunta
Así es como nombraría sus ejemplos:
ADEF no tiene apodos simples. Y dado que php es probablemente el lenguaje multiplataforma más conocido, todos entienden "basename" y "dirname", así que me quedaré con ese nombre. El nombre completo también es obvio; La ruta completa sería un poco ambigua, pero la mayoría de las veces significa lo mismo.
fuente