Nome del file? Nome del percorso? Nome di base? Standard di denominazione per pezzi di un percorso


228

Continuo a innervosirmi quando manipolo percorsi e nomi di file, perché non ho un sistema di denominazione comune che utilizzo.

Devo elaborare uno standard di denominazione e attenermi ad esso, e vorrei essere chiaro e coerente con gli altri, quindi mi sto aprendo per imparare le risposte canoniche.

Considera questo problema del giocattolo: (esempio di Windows, ma si spera che la risposta dovrebbe essere indipendente dalla piattaforma)

Ti è stato dato il nome completo di una cartella: C: \ users \ OddThinking \ Documents \ My Source. Si desidera percorrere le cartelle sottostanti e compilare tutti i file .src in .obj.

Ad un certo punto stai guardando la seguente stringa.

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

Quindi, quali nomi identificativi useresti per le parti?

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

Lasciami dare alcune risposte, per iniziare.

A) nome di base?

B) nome del file? O è il nome del file? La differenza è importante quando si scelgono i nomi degli identificatori e non sono mai coerente qui.

C) Estensione

D) Estensione. Aspetta, questo è quello che ho chiamato C. Dovrei evitare di memorizzare il punto e inserirlo quando richiesto? Cosa succede se non ci sono punti su un determinato file?

H) nome del percorso? O aspetta, è solo il percorso?

I) nome file. Aspetta, questo è quello che ho chiamato C. Path. Aspetta, questo è quello che ho chiamato H. Forse H dovrebbe essere il nome della cartella. "Cartella" non è un termine specifico di Windows, però?


Mike Pope, un redattore tecnico di Microsoft, sottolinea sul suo blog che mentre la guida di stile Microsoft si attiene costantemente a due parole: nome del file, nome della cartella, nome del volume, la Guida di stile di Apple a volte si unisce a loro: nome del file, percorso, nome del volume .
Pensando in modo strano il

A) non dovrebbe assolutamente essere chiamato basename perché basename è già usato in molti punti per indicare l'ultimo elemento in un percorso (per un file, sarebbe il nome del file senza dirpath). Alcuni posti chiamano il nome file senza estensione il stem.
Wisbucky

Inoltre, per i file con più periodi (ad esempio, foo.src.txt), esiste un modo standard per identificare (e nominare) l'estensione / i?
user117529

Risposte:


178

Penso che la tua ricerca di una convenzione di denominazione "standard" sarà vana. Ecco le mie proposte, basate su programmi esistenti e ben noti:

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

Vim lo chiama root dei file (: help modificatori di nome file)

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

nome file o nome base

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

estensione file / nome

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

anche l' estensione del file . Memorizza semplicemente senza il punto, se non c'è un punto su un file, non ha estensione

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

cima dell'albero
Nessuna convenzione, git la chiama directory base

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

percorso dalla cima dell'albero al
percorso relativo della foglia

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

un nodo dell'albero
senza convenzione, forse una semplice directory

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

nome dir

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

percorso completo / assoluto


8
Sta diventando fuori tema, ma fai attenzione con la memorizzazione dell'estensione separata dal punto. È necessario gestire i nomi dei file di "pippo", "pippo". e "foo.txt" (e persino "foo.txt.bak".)
Pensando in modo strano l'

1
ciao ragazzi, ottimo esempio. Sarebbe più facile da leggere se metti la risposta accanto alla domanda, invece di usare riferimenti che costringono a scorrere verso l'alto. A proposito, faccio una modifica per migliorarla. Grettings
Victor,

3
Victor, dal momento che la tua modifica è stata respinta (wtf ragazzi, questo è un ottimo miglioramento!) L'ho fatto da solo :-)
bagliore

1
Per 1.(nome del file solo senza estensione), ho deciso di andare avanti File Titlemolto tempo fa a causa della mancanza di una convenzione chiara o almeno di un consenso globale.
polyvertex,


36

Bella domanda prima di tutto, il mio +1. Questa cosa mi ha infastidito quando ho dovuto creare una serie di funzioni nella classe Utility una volta. GetFileName? o GetFullName? GetApplicationPath indica il percorso completo o il nome della directory? e così via. Vengo da .NET background, quindi penso di poter aggiungere poco altro alla risposta altrimenti eccellente di @blinry.

Riepilogo: (In corsivo è ciò che non userei come programmatore)

  1. Percorso : percorso specifica una posizione univoca nel file system (a meno che non sia il relativo percorso). Il nome del percorso viene usato meno spesso, ma rimarrei con il percorso - praticamente spiega di cosa si tratta. Il percorso può puntare a un file o una cartella o addirittura a nulla (C: \). Il percorso può essere:

    1. Percorso relativo : My Source\Widget\è anche il percorso relativo Widget\foo.src. Autoesplicativo.
    2. Percorso assoluto o Percorso completo : è il percorso completo che punta al target. Tendo a usare quest'ultimo più spesso. C:\users\OddThinking\Documents\My Source\Widget\foo.srcè quindi il percorso completo. Vedi alla fine quello che chiamo percorso completo che punta a un file e termina come una directory.

    La pagina wiki e la denominazione .NET per il percorso sono coerenti.

  2. Percorso radice o directory radice : la precedente è la convenzione .NET, mentre la seconda è più diffusa nei circoli UNIX. Anche se mi piacciono entrambi, tendo ad usare di più il primo. In Windows, a differenza di UNIX, ha molti percorsi root diversi, uno per ogni partizione. I sistemi Unix hanno una directory radice che contiene informazioni su altre directory e file. Per esempio. C:\è il percorso di root.

  3. Cartella o Nome cartella : Widget, OddThinkingecc nel tuo caso. Questa potrebbe essere una convenzione solo per Windows (in realtà è il mio strano modo di pensare :)), tuttavia mi oppongo fermamente alla risposta "Directory". Sebbene per una normale directory utente significhi la stessa di una cartella (come sottocartelle, sottodirectory), credo che dal punto di vista tecnico la "directory" dovrebbe sembrare un indirizzo qualificato per la destinazione e non la destinazione stessa. Più sotto.

    1. Cartelle secondarie : rispetto a users OddThinkinge Documentssono sottocartelle.
    2. Sottodirectory : Per quanto riguarda users OddThinking\, OddThinking\Documents\e OddThinking\Documents\My Source\Widget\sono indici secondari. Ma spesso non ci dobbiamo preoccupare, vero?
    3. Cartella figlio : rispetto a users OddThinkingè una cartella figlio (così come una sottocartella)
    4. Cartella principale : perOddThinking users è la sua cartella principale (menzionando solo terminologie diverse, non è un grosso problema).
  4. Nome directory o directory : il primo da utilizzare generalmente nella vita reale, il secondo da inserire nel codice. Questo si riferisce al percorso completo (o semplicemente al percorso completo ) fino alla cartella principale della destinazione . Nel tuo caso, C:\users\OddThinking\Documents\My Source\Widget(Sì, una directory non deve mai indicare un file). Uso il nome della directory nel mio codice poiché directory è una classe in .NET e Directory Name è ciò che la libreria stessa chiama. È abbastanza coerente con dirname utilizzato nei sistemi UNIX.

  5. Nome file o Basename : nome del file insieme all'estensione. Nel tuo caso: foo.src. Direi che per un uso non tecnico preferisco il nome del file (è ciò che significa per un utente finale) ma per scopi tecnici rimarrei rigorosamente con basename . Il nome del file viene spesso utilizzato da MS, ma sono sorpreso dal fatto che non siano coerenti non solo nella documentazione ma anche nella libreria . Il nome file potrebbe significare il nome base o il percorso completo del file. Quindi preferisco basename, questo è quello che li chiamo nel codice.Anche questa pagina sulla wiki dice che il nome del file potrebbe significare sia il percorso completo che il nome base. Sorprendentemente anche in .NET posso trovare il nome base di utilizzo per indicare il nome radice del file.

  6. Estensione o Nome file Estensione o File Extension : Ho come l'ultimo. Tutto si riferisce alla stessa cosa, ma di nuovo è una questione di dibattito! Wiki dice che è srcda allora che ricordo di aver letto che molte delle lingue lo interpretano come .src. Nota il punto. Quindi ancora una volta la mia opinione è che, per usi casuali, non importa quale sia, ma come programmatore vedo sempre l'estensione come .src.

    Ok, avrei potuto provare a recuperare alcuni usi standard, ma qui seguo due delle mie convenzioni. E si tratta di percorsi completi.

    1. In genere chiamo un percorso completo che punta a un file come percorso del file . Per me il percorso del file è ben definito, mi dice di cosa si tratta. Anche se con il nome del file lo trovo come nome del file, nel mio codice lo chiamo nome del file . È anche coerente con " nome directory ". Dal lato tecnico, il nome si riferisce al nome completo! Frustratingly .NET usa il termine nome file (quindi ho il mio caso qui) e talvolta il percorso del file per questo.

    2. Chiamo un percorso completo che termina come directory una directory. In effetti si può chiamare qualsiasi indirizzo che non punta a un file una directory. Così C:\users\OddThinking\Documents\My Source\è una directory, C:\users\OddThinking\è una directory o anche OddThinking\Documents\My Source\(meglio chiamarla sottodirectory o percorso relativo ancora migliore - tutto ciò dipende dal contesto in cui ci si sta occupando). Molto sopra ho citato qualcosa di diverso sulla directory che è il nome della directory. Ecco la mia opinione su questo: avrò un nuovo percorso per evitare confusione. Che cos'è questo D:\Fruit\Apple\Pip\? Una directory. Ma se la domanda è qual è la directory o il nome della directory ancora migliore D:\Fruit\Apple\Pip\, la risposta è D:\Fruit\Apple\. Spero sia chiaro.

    Direi che è meglio non preoccuparsi degli ultimi due termini poiché questo è ciò che crea più confusione (per me personalmente). Basta usare il termine percorso completo !

Per risponderti:

  1. rispetto al percorso che hai indicato

    A) Nessuna idea. Comunque non ho mai avuto bisogno di prenderlo da solo.

    B) nome di base

    C) Per il momento, la chiamerei estensione del file, sono meno preoccupato poiché non ho mai avuto bisogno che solo questo fosse nominato nel mio codice.

    D) sicuramente l'estensione del file.

    E) Non penso che questo sia un requisito di uso generale. Nessuna idea. Nella directory di base .NET è uguale al nome della directory.

    F) percorso relativo

    G) cartella (cartella principale su basename foo.src)

    H) nome della directory

    I) percorso completo (o anche nome file)

  2. in generale (mi dispiace per essere un po 'prolisso, solo per guidare il punto a casa) ma supponendo che foo.srcsia davvero un file

    A) NA

    B) nome di base

    C) NA

    D) estensione

    E) directory o semplicemente percorso

    F) percorso relativo

    G) NA

    H) directory o semplicemente percorso

    I) percorso completo (o anche nome file)

Ulteriore guida con un esempio dalla mia parte:

  1. Considera il percorso C:\Documents and Settings\All Users\Application Data\s.sql.

    1. C:\Documents and Settings\All Users\Application Data\s.sql è il percorso completo (che è un nome file)
    2. C:\Documents and Settings\All Users\Application Data\ è il nome della directory.
  2. Ora considera il percorso C:\Documents and Settings\All Users\Application Data

    1. C:\Documents and Settings\All Users\Application Data è il percorso completo (che sembra essere una directory)
    2. C:\Documents and Settings\All Users è il nome della directory.

Due miei consigli:

  1. Seguo questa regola empirica che quando si tratta di indirizzare un indirizzo completo indipendentemente dal suo tipo, quasi sempre lo chiamo "percorso completo". Questo non solo elimina l'uso di due terminologie per il percorso del file e il percorso della cartella, ma evita anche la potenziale confusione se si intende nominare quello del file come nome del file (che per la maggior parte degli utenti si traduce immediatamente in basename). Ma sì, se devi essere specifico sul tipo di percorso, è meglio nominare il nome del file o la directory anziché un "percorso" più generico.

  2. Qualunque cosa tu abbia, la tua idea in mente, essere coerente con essa per tutto. Avere un consenso tra i membri del team sul fatto che questo significhi questo e non quello.

Ora che solo dal cerchio ho un po 'di pratica. Un nuovo marchio di termini sarebbe quello che viene utilizzato su OS X e macchine Android. E tutti questi sono solo percorsi fisici nel filesystem. Una serie completamente nuova di terminologie sorgerebbe in caso di indirizzi web. Mi aspetto che qualcuno riempia il vuoto in questa stessa discussione :) Sarei felice di sentire la convenzione con cui sei andato avanti ..


Per molto tempo ho usato la parola "nome percorso" per indicare l'intero percorso assoluto compreso il nome file completo. La tua risposta, altri qui e risorse altrove mi hanno cambiato idea, e ora userò la parola "percorso completo" per questo, "percorso" per la posizione senza nome file e "nome file" o "nome" per il nome file si.
Nate,

24

In C ++, Boost.Filesystem ha ideato una nomenclatura per le varie parti di un percorso. Per i dettagli, consultare la documentazione di riferimento sulla decomposizione del percorso , nonché questo tutorial .

Ecco un riepilogo basato sul tutorial. Per:

  • Percorso di Windows: c:\foo\bar\baa.txt
  • Percorso Unix: /foo/bar/baa.txt

ottieni:

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

Standard C ++ ISO / IEC 14882: 2017

Inoltre la terminologia Boost.Filesystem è stata adottata da C ++ 17 => Vedistd::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

6
Come chiamano l'intera cosa allora? path, fullpath?
Wisbucky

@wisbucky L'intera cosa si chiama "percorso" nella loro nomenclatura.
Emile Cormier,

1
@wisbucky Corretto il collegamento. Grazie.
Emile Cormier,

@olibre: grazie per l'aggiornamento C ++ 17. Ma stem()fa parte del nome file , non del percorso .
Emile Cormier,

1
@ johnc.j. Boost è un peccato. File system non era così noto quando la domanda è stata posta per la prima volta. Preferirei adottare la nomenclatura di una biblioteca peer-reviewed piuttosto che inventare qualcosa da solo.
Emile Cormier,

9

La pathliblibreria standard di Python ha un'ottima convenzione di denominazione per i componenti del percorso: https://docs.python.org/3/library/pathlib.html

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

stelo

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

nome

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

[Niente]

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

suffisso

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

percorso del nonno

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

percorso relativo al percorso del nonno

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

nome del genitore

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

percorso principale

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

sentiero


8

No, non sei pazzo.

Nei sistemi Windows, a volte il percorso della directory che contiene il file è chiamato percorso , che è com'era dall'inizio. Quindi, per esempio,

    x:\dir1\dir2\myfile.txt

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

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

L'approccio Unix / Linux è molto più logico, ed è quello che tutti hanno menzionato sopra: percorso incluso il nome del file stesso. Tuttavia, se si digita "chiama /?" nella riga di comando di Windows, ottieni questo:

    %~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

Quindi eccolo, "solo percorso" e "solo nome file". Allo stesso tempo, si riferiscono all'intera stringa come "nome percorso completo", inteso come lettera di unità più percorso più nome file. Quindi non c'è vera verità. È inutile. Sei stato tradito.

Comunque,

Per rispondere alla tua domanda

Ecco come nominerei i tuoi esempi:

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

ADEF non ha semplici soprannomi. E poiché php è probabilmente il linguaggio multipiattaforma più conosciuto, tutti capiscono "basename" e "dirname", quindi mi atterrei a quel nome. Anche il nome completo è ovvio; il percorso completo sarebbe un po 'ambiguo, ma il più delle volte significa la stessa cosa.


1
Per molto tempo ho usato la parola "nome percorso" per indicare l'intero percorso assoluto compreso il nome file completo. Altre risposte qui e risorse altrove mi hanno cambiato idea, e ora userò la parola "fullpath" per questo, "path" per la posizione senza nome file e "nome file" o "nome" per il nome file stesso.
Nate,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.