Fico me intrometendo quando manipulo caminhos e nomes de arquivos, porque não tenho um sistema de nomes comum que uso.
Eu preciso criar um padrão de nomenclatura e cumpri-lo, e gostaria de ser claro e consistente com os outros, por isso estou me abrindo para aprender as respostas canônicas.
Considere este problema de brinquedo: (exemplo do Windows, mas espero que a resposta deva ser independente da plataforma)
Você recebeu o nome completo de uma pasta: C: \ users \ OddThinking \ Documents \ My Source. Você deseja percorrer as pastas abaixo e compilar todo o .src no .obj.
Em algum momento, você está olhando para a seguinte sequência.
C:\users\OddThinking\Documents\My Source\Widget\foo.src
Então, quais nomes de identificador 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 é o nome do arquivo? A diferença é importante ao escolher nomes de identificadores e nunca sou consistente aqui.
C) Extensão
D) Extensão. Espere, foi assim que chamei C. Devo evitar armazenar o ponto e inseri-lo quando necessário? E se não houver ponto em um arquivo específico?
H) nome do caminho? Ou espere, é apenas o caminho?
I) nome do arquivo. Espere, foi assim que chamei C. Path. Espere, foi assim que chamei H. Talvez H deva ser o nome da pasta. "Pasta" não é um termo específico do Windows?
fonte
stem
.Respostas:
Eu acho que sua busca por uma convenção de nomenclatura "padrão" será em vão. Aqui estão minhas propostas, com base em programas existentes e conhecidos:
A) C: \ usuários \ OddThinking \ Documents \ Minha fonte \ Widget \ foo .src
B) C: \ usuários \ OddThinking \ Documents \ Minha fonte \ Widget \ foo.src
C) C: \ usuários \ OddThinking \ Documents \ Minha fonte \ Widget \ foo. src (sem ponto)
D) C: \ usuários \ OddThinking \ Documents \ Minha fonte \ Widget \ foo .src (com ponto)
E) C: \ users \ OddThinking \ Documents \ Minha fonte \ Widget \ foo.src
F) C: \ usuários \ OddThinking \ Documents \ Minha fonte \ Widget \ foo.src
G) C: \ usuários \ OddThinking \ Documents \ Minha fonte \ Widget \ foo.src
H) C: \ usuários \ OddThinking \ Documents \ Minha fonte \ Widget \ foo.src
I) C: \ users \ OddThinking \ Documents \ Minha fonte \ Widget \ foo.src
fonte
1.
(nome do arquivo apenas sem extensão), decidiFile Title
concordar há muito tempo devido à falta de uma convenção clara ou pelo menos a um consenso global.A
(nome do arquivo sem extensão), você pode usarstem
. Referências: 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 /…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 sou do .NET background, então acho que posso acrescentar um pouco mais à excelente resposta de @blinry.
Resumo: (em itálico é o que eu não usaria como programador)
Caminho : Caminho especifica um local exclusivo no sistema de arquivos (a menos que seja o caminho relativo). O nome do caminho é usado com menos frequência, mas eu ficaria com o caminho - explica praticamente o que é. O caminho pode apontar para um arquivo ou uma pasta ou até mesmo nada (C: \). O caminho pode ser:
My Source\Widget\
é um caminho relativoWidget\foo.src
. Auto-explicativo.C:\users\OddThinking\Documents\My Source\Widget\foo.src
é, portanto, o caminho completo. Veja no final o que chamo de caminho completo que aponta para um arquivo e que termina como um diretório.A página da wiki e a nomenclatura do .NET para path são consistentes.
Caminho raiz ou diretório raiz : anterior é a convenção do .NET, enquanto a última é mais ouvida nos círculos UNIX. Embora eu goste de ambos, costumo usar mais o primeiro. No Windows, diferentemente do UNIX, possui muitos caminhos raiz diferentes, um para cada partição. Os sistemas Unix têm um diretório raiz que contém informações sobre outros diretórios e arquivos. Por exemplo.
C:\
é o caminho raiz.Pasta ou Nome da Pasta :
Widget
,OddThinking
etc no seu caso. Esta pode ser uma convenção apenas para Windows (de fato, é o meu próprio pensamento estranho :)), no entanto, sou contra a resposta ofuscante "Diretório". Embora para um diretório de usuário normal signifique o mesmo que uma pasta (como subpastas, subdiretórios), acredito que, de um ângulo técnico, o "diretório" deve soar como um endereço qualificado para o destino, e não o próprio destino. Mais abaixo.users
OddThinking
eDocuments
são subpastas.users
OddThinking\
,OddThinking\Documents\
eOddThinking\Documents\My Source\Widget\
são subdiretórios. Mas nem sempre precisamos nos preocupar com isso, precisamos?users
OddThinking
uma pasta filho (e também à subpasta)OddThinking
users
é sua pasta pai (apenas mencionando terminologias diferentes, não é grande coisa).Diretório ou nome do diretório : o primeiro a ser usado geralmente na vida real, o segundo a ser em código. Refere-se ao caminho completo (ou simplesmente ao caminho completo ) até a pasta pai do destino . No seu caso,
C:\users\OddThinking\Documents\My Source\Widget
(Sim, um diretório nunca deve apontar para um arquivo). Eu uso o nome do diretório no meu código, pois directory é uma classe no .NET e Directory Name é o que a própria biblioteca chama. É bastante consistente com o dirname usado nos sistemas UNIX.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, prefiro o nome do arquivo (é o que isso significa para o usuário final), mas, para fins técnicos, eu continuaria estritamente com o nome da base . Nome do arquivo é frequentemente usado pelo MS, mas estou surpreso como eles não são consistentes, não apenas na documentação, mas também na biblioteca . O nome do arquivo pode significar nome da base ou caminho completo do arquivo. Então, eu sou a favor do nome da base, é assim que os chamo de 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, posso encontrar o nome de base de uso como o nome raiz do arquivo.Extensão ou extensão de nome de arquivo ou extensão de arquivo : Eu gosto da última. Tudo se refere à mesma coisa, mas o que é isso é novamente uma questão de debate! O Wiki diz que faz
src
algum tempo que eu lembro de ler que muitos dos idiomas 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 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 sigo. E é sobre caminhos completos.
Eu geralmente chamo um caminho completo que aponta para um arquivo como caminho do arquivo . Para mim, o caminho do arquivo é claro, ele me diz o que é. Embora com nome do arquivo eu o encontre como o nome do arquivo, no meu código eu o chamo de nome do arquivo . Também é consistente com " nome do diretório ". Do lado técnico, nome refere-se ao nome totalmente qualificado! Frustrantemente, o .NET usa o termo nome do arquivo (por isso, tenho meu caso aqui) e, às vezes, o caminho do arquivo.
Eu chamo um caminho completo que termina como diretório, diretório. De fato, pode-se chamar qualquer endereço que não aponte para um arquivo como diretório. Assim,
C:\users\OddThinking\Documents\My Source\
é um diretório,C:\users\OddThinking\
é um diretório, ou até mesmoOddThinking\Documents\My Source\
(melhor chamá-lo de subdiretório ou ainda melhor caminho relativo - tudo isso depende do contexto em que você está lidando com ele). Bem acima, mencionei algo diferente sobre o diretório, que é o nome do diretório. Aqui está a minha opinião: vou pegar um novo caminho para evitar confusão. O que é issoD:\Fruit\Apple\Pip\
? Um diretório Mas se a pergunta é qual é o diretório ou o nome do diretório ainda melhorD:\Fruit\Apple\Pip\
, a resposta éD:\Fruit\Apple\
. Espero que esteja claro.Eu diria que é melhor não se preocupar com os dois termos finais, pois é isso que cria mais confusão (para mim, pessoalmente). Basta usar o termo caminho completo !
Para lhe responder:
com relação ao caminho que você deu
A) Não faço ideia. De qualquer forma, eu nunca precisei pegar esse sozinho.
B) nome base
C) Eu chamaria isso de extensão de arquivo por enquanto, estou menos preocupado, pois nunca precisei que isso fosse mencionado no meu código.
D) extensão de arquivo certamente.
E) Não acho que esse seja um requisito de uso 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 da base
foo.src
)H) nome do diretório
I) caminho completo (ou mesmo nome do arquivo)
em geral (desculpe por ser um pouco detalhado, apenas para esclarecer as coisas), mas supondo que
foo.src
seja realmente um arquivoA) 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 mesmo nome do arquivo)
Condução adicional com um exemplo do meu lado:
Considere o caminho
C:\Documents and Settings\All Users\Application Data\s.sql
.C:\Documents and Settings\All Users\Application Data\s.sql
é o caminho completo (que é um nome de arquivo)C:\Documents and Settings\All Users\Application Data\
é o nome do diretórioAgora considere o caminho
C:\Documents and Settings\All Users\Application Data
C:\Documents and Settings\All Users\Application Data
é o caminho completo (que passa a ser um diretório)C:\Documents and Settings\All Users
é o nome do diretórioDuas dicas minhas:
Sigo esta regra geral: quando se trata de endereçar um endereço completo, independentemente do seu tipo, quase sempre o chamo de "caminho completo". Isso não apenas elimina o uso de duas terminologias para o caminho do arquivo e o caminho da pasta, mas também evita possíveis confusões se você quiser nomear o nome do arquivo como nome do arquivo (o que para a maioria dos usuários imediatamente se traduz em nome de base). Mas sim, se você precisar ser específico sobre o tipo de caminho, é melhor nomear que nome ou diretório de arquivo, em vez de "caminho" mais genérico.
Seja o que for, você teria sua própria idéia em mente, seja consistente com ela o tempo todo. Tenha 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 no OS X e nas máquinas 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 nesse mesmo tópico :) Eu ficaria feliz em ouvir a convenção com a qual você foi adiante.
fonte
No C ++, o Boost.Filesystem criou uma nomenclatura para as várias partes de um caminho. Consulte a documentação de referência da decomposição do caminho para obter detalhes, assim como este tutorial .
Aqui está um resumo com base no tutorial. Para:
c:\foo\bar\baa.txt
/foo/bar/baa.txt
você obtém:
Norma C ++ ISO / IEC 14882: 2017
Além disso, a terminologia Boost.Filesystem foi adotada pelo C ++ 17 => See
std::filesystem
fonte
path
,fullpath
?stem()
faz parte do nome do arquivo , não do caminho .A
pathlib
biblioteca padrão do Python possui uma excelente convenção de nomenclatura para os componentes do caminho: https://docs.python.org/3/library/pathlib.htmla) C: \ usuários \ OddThinking \ Documents \ Minha fonte \ Widget \ foo .src
b) C: \ usuários \ OddThinking \ Documents \ Minha fonte \ Widget \ foo.src
c) C: \ usuários \ OddThinking \ Documents \ Minha fonte \ Widget \ foo. src (sem ponto)
d) C: \ usuários \ OddThinking \ Documents \ Minha fonte \ Widget \ foo .src (com ponto)
e) C: \ usuários \ OddThinking \ Documents \ Minha fonte \ Widget \ foo.src
f) C: \ usuários \ OddThinking \ Documents \ Minha fonte \ Widget \ foo.src
g) C: \ usuários \ OddThinking \ Documents \ Minha fonte \ Widget \ foo.src
h) C: \ usuários \ OddThinking \ Documents \ Minha fonte \ Widget \ foo.src
i) C: \ users \ OddThinking \ Documents \ Minha fonte \ Widget \ foo.src
fonte
Não, você não é louco.
Nos sistemas Windows, às vezes o caminho do diretório que contém o arquivo é chamado de caminho , como era desde o início. Então, por exemplo,
A abordagem Unix / Linux é muito mais lógica, e é isso que todos mencionaram acima: caminho incluindo o nome do arquivo. No entanto, se você digitar "ligar /?" na linha de comando do Windows, você obtém o seguinte:
Portanto, existe "somente caminho" e "apenas nome do arquivo". Ao mesmo tempo, eles se referem a toda a cadeia como "nome completo do caminho", que é entendido como letra da unidade mais caminho mais nome do arquivo. Portanto, não há verdade real. Isso é fútil. Você foi traído.
De qualquer forma,
Para responder sua pergunta
É assim que eu nomearia seus exemplos:
O ADEF não possui apelidos simples. E como o php é provavelmente a linguagem de plataforma cruzada mais conhecida, todo mundo entende "basename" e "dirname", então eu continuaria com esse nome. Nome completo também é óbvio; o caminho completo seria um pouco ambíguo, mas na maioria das vezes significa exatamente a mesma coisa.
fonte