¿Nombre del archivo? Nombre de ruta? Nombre base? Norma de nomenclatura para partes de una ruta

228

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?

Pensamiento extraño
fuente
Mike Pope, editor técnico de Microsoft, señala en su blog que, si bien la guía de estilo de Microsoft se adhiere constantemente a dos palabras: nombre de archivo, nombre de carpeta, nombre de volumen, la Guía de estilo de Apple a veces se une a ellas: nombre de archivo, nombre de ruta, nombre de volumen .
Pensamiento extraño
A) definitivamente no debería llamarse basename porque basename ya se usa en muchos lugares para significar el último elemento de una ruta (para un archivo, ese sería el nombre de archivo sin dirpath). Algunos lugares llaman al nombre de archivo sin extensión stem.
wisbucky
Además, para archivos con varios períodos (por ejemplo, foo.src.txt), ¿hay alguna forma estándar de identificar (y nombrar) la / s extensión / es?
user117529

Respuestas:

178

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

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 (sin punto)

extensión de archivo / nombre

D) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src (con punto)

También la extensión de archivo . Simplemente almacene sin el punto, si no hay un punto en un archivo, no tiene extensión

E) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src

parte superior del árbol
Sin convenciones, git lo llama directorio base

F) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src

camino desde la parte superior del árbol hasta el
camino relativo de la hoja

G) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src

un nodo del árbol
sin convenciones, quizás un directorio simple

H) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src

nombre dir

I) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src

camino completo / absoluto

parpadeante
fuente
8
Está fuera de tema, pero tenga cuidado con el almacenamiento de la extensión separada del punto. Debe manejar los nombres de archivo de "foo", "foo". y "foo.txt" (e incluso "foo.txt.bak".)
Pensamiento extraño
1
Hola chicos, gran ejemplo. Sería más fácil de leer si coloca la respuesta al lado de la pregunta, en lugar de utilizar referencias que obligan a desplazarse hacia arriba. Por cierto, hago una edición para mejorar eso. Grettings
Victor
3
Víctor, ya que tu edición fue rechazada (wtf chicos, ¡esta es una muy buena mejora!) Lo hice yo mismo :-)
parpadeante
1
Para 1.(nombre de archivo solo sin extensión), decidí hacerlo File Titlehace mucho tiempo debido a la falta de una convención clara o al menos un consenso global.
polyvertex
36

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)

  1. 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:

    1. Ruta relativa : My Source\Widget\es la ruta relativa, así como Widget\foo.src. Autoexplicativo.
    2. Ruta absoluta o ruta completa : es la ruta totalmente calificada que apunta al objetivo. Tiendo a usar este último con más frecuencia. C:\users\OddThinking\Documents\My Source\Widget\foo.srcEs 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.

  2. 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íz

  3. Carpeta o nombre de carpeta : Widget, OddThinkingetc 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.

    1. Subcarpetas : con respecto a users OddThinkingy Documentsson subcarpetas.
    2. Subdirectorios : con respecto a users OddThinking\, OddThinking\Documents\y OddThinking\Documents\My Source\Widget\son subdirectorios. Pero a menudo no necesitamos preocuparnos por eso, ¿verdad?
    3. Carpetausers OddThinking secundaria : con respecto a es una carpeta secundaria (así como una subcarpeta)
    4. Carpeta principal : porque OddThinking userses su carpeta principal (solo mencionando diferentes terminologías, no es gran cosa).
  4. 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.

  5. 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.

  6. 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 srcentonces 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.

    1. 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.

    2. 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 incluso OddThinking\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 esto D:\Fruit\Apple\Pip\? Un directorio Pero si la pregunta es cuál es el directorio o incluso mejor nombre de directorio D:\Fruit\Apple\Pip\, la respuesta es D:\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:

  1. 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)

  2. en general (perdón por ser un poco detallado, solo para llevar el punto a casa), pero suponiendo que foo.srces realmente un archivo

    A) 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:

  1. Considera el camino C:\Documents and Settings\All Users\Application Data\s.sql.

    1. C:\Documents and Settings\All Users\Application Data\s.sql es la ruta completa (que es un nombre de archivo)
    2. C:\Documents and Settings\All Users\Application Data\ es el nombre del directorio
  2. Ahora considera el camino C:\Documents and Settings\All Users\Application Data

    1. C:\Documents and Settings\All Users\Application Data es la ruta completa (que resulta ser un directorio)
    2. C:\Documents and Settings\All Users es el nombre del directorio

Dos consejos míos:

  1. 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.

  2. 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.

nawfal
fuente
Durante mucho tiempo he estado usando la palabra "ruta" para referirse a la ruta absoluta completa, incluido el nombre de archivo completo. Su respuesta, otros aquí y recursos en otros lugares han cambiado de opinión al respecto, y ahora usaré la palabra "ruta completa" para esto, "ruta" para la ubicación sin nombre de archivo y "nombre de archivo" o "nombre" para el nombre de archivo sí mismo.
Nate
24

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:

  • Ruta de Windows: c:\foo\bar\baa.txt
  • Ruta de 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

C ++ estándar ISO / IEC 14882: 2017

Además, la terminología de 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
Emile Cormier
fuente
66
¿Cómo llaman a todo el asunto entonces? path, fullpath?
wisbucky
@wisbucky Todo el asunto se llama "ruta" en su nomenclatura.
Emile Cormier
1
@wisbucky Se corrigió el enlace. Gracias.
Emile Cormier
@olibre: Gracias por la actualización de C ++ 17. Pero stem()es parte del nombre del archivo , no de la ruta .
Emile Cormier
1
@ johnc.j. Es una pena Boost. El sistema de archivos no era tan conocido cuando se hizo la pregunta por primera vez. Prefiero adoptar la nomenclatura de una biblioteca revisada por pares que inventar algo por mi cuenta.
Emile Cormier
9

La pathlibbiblioteca estándar de Python tiene una gran convención de nomenclatura para componentes de ruta: https://docs.python.org/3/library/pathlib.html

a) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src

vástago

b) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src

nombre

c) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo. src (sin punto)

[nada]

d) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src (con punto)

sufijo

e) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src

camino del abuelo

f) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src

ruta relativa a la ruta del abuelo

g) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src

Nombre del padre

h) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src

ruta principal

i) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src

camino

Maggyero
fuente
8

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,

    x:\dir1\dir2\myfile.txt

    Windows:
    --------
        PATH:  x:\dir1\dir2
        FILE:  myfile.txt

    Unix/Linux:
    -----------
        PATH:  /dir1/dir2/myfile.txt
        FILE:  myfile.txt

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:

    %~1         - expands %1 removing any surrounding quotes (")
    %~f1        - expands %1 to a fully qualified path name
    %~d1        - expands %1 to a drive letter only
    %~p1        - expands %1 to a path only
    %~n1        - expands %1 to a file name only
    %~x1        - expands %1 to a file extension only

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:

A: -
B: basename
C: extension
D: -
E: -
F: -
G: -
H: pathname (or dirname or containing path)
I: full name

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.

dkellner
fuente
1
Durante mucho tiempo he estado usando la palabra "ruta" para referirse a la ruta absoluta completa, incluido el nombre de archivo completo. Otras respuestas aquí y recursos en otros lugares han cambiado de opinión al respecto, y ahora usaré la palabra "ruta completa" para esto, "ruta" para la ubicación sin nombre de archivo y "nombre de archivo" o "nombre" para el nombre de archivo en sí.
Nate