language agnostic not Nome do arquivo? Nome do caminho? Nome base? Padrão de nomenclatura para partes de um caminho




windows folder characters not allowed (4)

Em C ++, o Boost.Filesystem criou uma nomenclatura para as várias partes de um caminho. Consulte a documentação de referência de decomposição do caminho para obter detalhes, bem como este tutorial .

Aqui está um resumo baseado no tutorial. Para:

  • Caminho do Windows: c:\foo\bar\baa.txt
  • Caminho Unix: /foo/bar/baa.txt

você recebe:

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

Norma C ++ ISO / IEC 14882: 2017

Além disso, a terminologia Boost.Filesystem foi adotada por C++17 => Veja std::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

Eu continuo me dando em nós quando eu sou caminhos de manipulação e nomes de arquivos, porque eu não tenho um sistema de nomenclatura comum que eu uso.

Eu preciso criar um padrão de nomenclatura e cumpri-lo, e eu gostaria de ser claro e consistente com os outros, então estou me abrindo para aprender as respostas canônicas.

Considere este problema de brinquedo: (exemplo do Windows, mas esperamos que a resposta deva ser independente de plataforma)

Você recebeu o nome completo de uma pasta: C: \ users \ OddThinking \ Documents \ My Source. Você deseja percorrer as pastas abaixo e compilar todas as .src para .obj.

Em algum momento você está olhando para a seguinte string.

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

Então, quais nomes de identificadores você usaria para as 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

Deixe-me dar algumas respostas, para você começar.

A) nome base?

B) nome do arquivo? Ou é nome de arquivo? A diferença é importante ao escolher nomes de identificadores, e eu nunca sou consistente aqui.

C) Extensão

D) Extensão. Espere, é assim que eu chamei C. Devo evitar o armazenamento do ponto e apenas colocar quando necessário? E se não houver ponto em um arquivo específico?

H) nome do caminho? Ou espere, é apenas o caminho?

Eu) nome do arquivo. Espere, isso é o que eu chamei de C. Path. Espere, é assim que eu chamei H. Talvez H deva ser o nome da pasta. Não é "pasta" um termo específico do Windows?


Acho que sua busca por uma convenção de nomenclatura "padrão" será em vão. Aqui estão minhas propostas, baseadas em programas conhecidos e existentes:

A) C: \ usuários \ OddThinking \ Documents \ Minha origem \ Widget \ foo .src

Vim chama isso de raiz de arquivo (: help filename-modifiers)

B) C: \ usuários \ OddThinking \ Documents \ My Source \ Widget \ foo.src

nome do arquivo ou nome base

C) \ usuários \ OddThinking \ Documents \ My Source \ Widget \ foo. src (sem ponto)

extensão de arquivo / nome

D) C: \ usuários \ OddThinking \ Documents \ Minha Fonte \ Widget \ foo .src (com ponto)

também extensão de arquivo . Simplesmente armazene sem o ponto, se não houver ponto em um arquivo, não tem extensão

E) C: \ usuários \ OddThinking \ Documents \ My Source \ Widget \ foo.src

topo da árvore
Sem convenção, o git chama o diretório base

F: C: \ usuários \ OddThinking \ Documents \ My Source \ Widget \ foo.src

caminho do topo da árvore para a folha
caminho relativo

G) C: \ usuários \ OddThinking \ Documents \ My Source \ Widget \ foo.src

um nó da árvore
sem convenção, talvez um diretório simples

H) C: \ usuários \ OddThinking \ Documents \ My Source \ Widget \ foo.src

nome do dir

I) C: \ usuários \ OddThinking \ Documents \ My Source \ Widget \ foo.src

caminho completo / absoluto


Nos sistemas Windows, às vezes, o caminho do diretório que contém o arquivo é chamado de caminho , que é como era desde o início. Então, por exemplo,

d:\dir1\dir2\myfile.txt

é entendido como:

PATH = "d:\dir1\dir2"
FILE = "myfile.txt"

A abordagem Unix / Linux é muito mais lógica, e é isso que todos mencionaram acima: caminho completo incluindo o próprio nome do arquivo. No entanto, se você digitar "chamar /?" na linha de comando do Windows, você recebe isto:

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

Então é isso, "caminho apenas" e "nome do arquivo apenas". Ao mesmo tempo, eles se referem à string inteira como "nome de caminho totalmente qualificado", que é entendido como letra de unidade mais caminho mais nome de arquivo.

Só estou dizendo isso para evitar que todos se culpem pela confusão em sua cabeça em torno deste tópico. Está tudo bem. Você não é louco. Os nomes dos caminhos são :)


Boa pergunta antes de tudo, meu +1. Isso me incomodou quando tive que criar uma série de funções na classe Utility uma vez. GetFileName? ou GetFullName? GetApplicationPath significa caminho completo ou o nome do diretório? e assim por diante. Eu venho de fundo .net, então eu acho que posso adicionar um pouco mais a outra excelente resposta por @blinry.

Resumo: (Em itálico é o que eu não usaria como programador)

  1. Caminho : Caminho especifica um local exclusivo no sistema de arquivos (a menos que seu caminho relativo). O nome do caminho é menos usado, mas eu ficaria com o caminho - ele praticamente explica o que é. Caminho pode apontar para um arquivo ou uma pasta ou até mesmo nada (C: \). Caminho pode ser:

    1. Caminho relativo : My Source\Widget\ é o caminho relativo, bem como o Widget\foo.src . Auto-explicativo.
    2. Caminho absoluto ou Caminho completo : é o caminho completo que aponta para o destino. Eu costumo usar o último com mais freqüência. C:\users\OddThinking\Documents\My Source\Widget\foo.src é, portanto, o caminho completo. Veja no final o que eu chamo de caminho completo que aponta para um arquivo e que termina como um diretório.

    A página da wiki e a nomenclatura .NET para o caminho são consistentes.

  2. Caminho Raiz ou Diretório Raiz : O antigo é a convenção .NET, enquanto o último é mais ouvido nos círculos do UNIX. Embora eu goste dos dois, costumo usar mais o primeiro. No Windows, ao contrário do UNIX, há muitos caminhos-raiz diferentes, um para cada partição. Os sistemas Unix possuem um diretório raiz que contém informações sobre outros diretórios e arquivos. Por exemplo. C:\ é o caminho da raiz.

  3. Nome da Pasta ou Pasta : Widget , OddThinking etc no seu caso. Isso pode ser uma convenção apenas do Windows (na verdade, é meu próprio pensamento estranho :)), no entanto, eu me oponho fortemente a resposta do Blinry "Directory". Embora para um diretório de usuário normal signifique o mesmo que uma pasta (como subpastas, subdiretórios), acredito que a partir de um ângulo técnico "diretório" deve soar como um endereço qualificado para o destino e não o alvo em si. Mais abaixo.

    1. Sub-pastas : Com relação aos users OddThinking e Documents são subpastas.
    2. Sub-diretórios : Com relação aos users OddThinking\ , OddThinking\Documents\ e OddThinking\Documents\My Source\Widget\ são subdiretórios. Mas muitas vezes não precisamos nos preocupar com isso, não é?
    3. Pasta Filha : Com relação aos users OddThinking é uma pasta filha (assim como subpasta)
    4. Pasta pai : Para users OddThinking é sua pasta pai (Apenas mencionando diferentes terminologias, não é grande coisa).
  4. Diretório ou Nome do Diretório : O primeiro a ser usado geralmente na vida real, o último a estar no código. Isso se refere ao caminho totalmente qualificado (ou simplesmente caminho completo ) até a pasta pai do destino. No seu caso, C:\users\OddThinking\Documents\My Source\Widget (Sim, um diretório nunca é destinado a apontar para um arquivo). Eu uso o nome do diretório no meu código desde diretório é uma classe no .net e nome do diretório é o que a própria biblioteca chama. É bastante consistente com o dirname usado em sistemas UNIX.

  5. Nome do arquivo ou nome da base : nome do arquivo junto com a extensão. No seu caso: foo.src . Eu diria que para um uso não técnico eu prefiro o nome do arquivo (é o que significa para um usuário final), mas para fins técnicos, eu iria estritamente ficar com basename . O nome do arquivo é frequentemente usado pelo MS, mas me surpreende como eles não são consistentes, não apenas na documentação, mas até mesmo na biblioteca . O nome do arquivo pode significar o nome da base ou o caminho completo do arquivo. Então eu prefiro basename, é como eu os chamo em código. Esta página no wiki também diz que o nome do arquivo pode significar o caminho completo ou o nome da base. Surpreendentemente, mesmo no .NET eu posso encontrar o nome de base de uso para significar o nome da raiz do arquivo.

  6. Extensão ou Extensão de Arquivo ou Extensão de Arquivo : Eu gosto do último. Tudo se refere à mesma coisa, mas o que é isso é novamente uma questão de debate! Wiki diz que é src enquanto naquela época eu lembro de ler que muitas das linguagens o interpretam como .src . Observe o ponto. Então, mais uma vez, minha opinião é que, para usos casuais, não importa o que seja, mas como programador eu sempre vejo a extensão como .src .

    Ok, eu poderia ter tentado buscar alguns usos padrão, mas aqui estão duas das minhas convenções que eu sigo. E é sobre caminhos completos.

    1. Eu geralmente chamo um caminho completo que aponta para um arquivo como caminho de arquivo . Para mim, o caminho do arquivo é claro, diz-me o que é. Embora com o nome do arquivo eu o encontre como o nome do arquivo, no meu código eu o chamo de nome de arquivo . Também é consistente com o " nome do diretório ". Do lado técnico, nome refere-se ao nome totalmente qualificado! Frustrantemente, o .NET usa o termo file name (então eu tenho o meu caso aqui) e, às vezes, o caminho do arquivo para isso.

    2. Eu chamo um caminho completo que termina como um diretório em um diretório. Na verdade, pode-se chamar qualquer parte de endereço que não aponte para um arquivo de um diretório. Então C:\users\OddThinking\Documents\My Source\ é um diretório, C:\users\OddThinking\ é um diretório, ou mesmo OddThinking\Documents\My Source\ (melhor chamá-lo de subdiretório ou caminho relativo ainda melhor - tudo depende do contexto que você está lidando com isso). Bem acima eu mencionei algo diferente sobre o diretório que é o nome do diretório. Aqui está a minha opinião: vou buscar um novo caminho para evitar confusão. O que é esse D:\Fruit\Apple\Pip\ ? Um diretório. Mas se a questão é qual é o diretório ou ainda melhor nome de diretório de D:\Fruit\Apple\Pip\ , a resposta é D:\Fruit\Apple\ . Espero que seja claro.

    Eu diria que é melhor não se preocupar com os dois últimos termos, pois é isso que cria a maior confusão (para mim, pessoalmente). Basta usar o termo caminho completo !

Para te responder:

  1. com relação ao caminho que você deu

    A) sem ideia. De qualquer forma eu nunca precisei conseguir isso sozinho.

    B) nome base

    C) Eu apenas chamaria de extensão de arquivo por enquanto, eu estou menos preocupada já que eu nunca precisei que sozinha fosse nomeada no meu código.

    D) extensão de arquivo com certeza.

    E) Eu não acho que este seja um requisito de propósito geral. Nenhuma idéia. No diretório base do .NET é o mesmo que o nome do diretório.

    F) caminho relativo

    G) pasta (pasta pai para o nome de base foo.src )

    H) nome do diretório

    I) caminho completo (ou até mesmo nome do arquivo)

  2. em geral (desculpe por ser um pouco verboso, apenas para direcionar o ponto para casa), mas assumindo foo.src é de fato um arquivo

    A) NA

    B) nome base

    C) NA

    D) extensão

    E) diretório ou simplesmente caminho

    F) caminho relativo

    G) NA

    H) diretório ou simplesmente caminho

    I) caminho completo (ou até mesmo nome do arquivo)

Mais dirigindo com um exemplo do meu lado:

  1. Considere o caminho C:\Documents and Settings\All Users\Application Data\s.sql .

    1. C:\Documents and Settings\All Users\Application Data\s.sql é o caminho completo (que é um nome de arquivo)
    2. C:\Documents and Settings\All Users\Application Data\ é o nome do diretório.
  2. Agora considere o caminho C:\Documents and Settings\All Users\Application Data

    1. C:\Documents and Settings\All Users\Application Data é o caminho completo (que é um diretório)
    2. C:\Documents and Settings\All Users é o nome do diretório.

Duas dicas minhas:

  1. Eu sigo esta regra de ouro que, quando se trata de abordar um endereço completo, independentemente do seu tipo, eu quase sempre o chamo de "caminho completo". Isso não apenas elimina o uso de duas terminologias para caminho de arquivo e caminho de pasta, mas também evita a confusão potencial se você for nomear o arquivo como nome de arquivo (que para a maioria dos usuários imediatamente traduz para basename). Mas sim, se você precisa ser específico sobre o tipo de caminho, é melhor nomear o nome do arquivo ou o diretório em vez do "caminho" mais genérico.

  2. Seja o que for que você tenha sua própria ideia em mente, seja coerente com ela por toda parte. Ter um consenso entre os membros da equipe de que isso significa isso e não aquilo.

Agora que apenas do círculo eu tenho alguma prática. Uma nova marca de termos seria o que é usado em máquinas OS X e Android. E todos esses são apenas caminhos físicos no sistema de arquivos. Um novo conjunto de terminologias surgiria no caso de endereços da web. Espero que alguém preencha o vazio neste mesmo segmento :) Eu ficaria feliz em ouvir a convenção com a qual você foi em frente ..





filenames