Dosya adı? Yol adı? Temel isim? Bir yolun parçaları için adlandırma standardı


228

Yolları ve dosya adlarını değiştirirken kendimi düğümlere sokuyorum, çünkü kullandığım ortak bir adlandırma sistemim yok.

Bir adlandırma standardı bulmam ve ona bağlı kalmam gerekiyor ve diğerleriyle net ve tutarlı olmak istiyorum, bu yüzden kanonik cevapları öğrenmek için açıyorum.

Bu oyuncak sorununu düşünün: (Windows örneği, ancak umarım cevap platformdan bağımsız olmalıdır)

Size bir klasörün tam adı verilmiştir: C: \ users \ OddThinking \ Documents \ My Source. Altındaki klasörleri yürümek ve tüm .src dosyalarını .obj olarak derlemek istiyorsunuz.

Bir noktada aşağıdaki dizeye bakıyorsunuz.

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

Peki, parçalar için hangi tanımlayıcı adlarını kullanırsınız?

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

Başlamak için bazı cevaplar vereyim.

A) temel isim?

B) dosya adı? Yoksa dosya adı mı? Tanımlayıcı adları seçerken fark önemlidir ve burada asla tutarlı değilim.

C) Uzatma

D) Uzatma. Bekle, C olarak adlandırdığım şey budur. Noktayı saklamaktan kaçınmalı mıyım? Belirli bir dosyada nokta yoksa ne olur?

H) yol adı? Yoksa bekle, sadece yol mu?

I) dosya adı. Bekle, C. Path dediğim buydu. Bekle, ben H olarak adlandırdım. Belki H klasör adı olmalı. Peki "klasör" Windows'a özgü bir terim değil mi?


Microsoft'un teknik bir editörü olan Mike Pope, blogunda Microsoft stil kılavuzunun sürekli olarak iki kelimeye yapışırken: dosya adı, klasör adı, birim adı, Apple Stil Kılavuzu'nun bazen onlara katıldığını belirtiyor: dosya adı, yol adı, birim adı .
Oddthinking

A) kesinlikle basename olarak adlandırılmamalıdır, çünkü basename zaten birçok yerde bir yoldaki son öğeyi ifade etmek için kullanılır (bir dosya için dirpath olmadan dosya adı olurdu). Bazı yerler dosya adını uzantısı olmadan çağırır stem.
wisbucky

Ayrıca, birden fazla periyodu olan dosyalar için (ör. Foo.src.txt), uzantıları tanımlamak (ve adlandırmak) için standart bir yol var mı?
user117529

Yanıtlar:


178

"Standart" bir adlandırma kuralı aramanın boşuna olacağını düşünüyorum. Mevcut, iyi bilinen programlara dayanan tekliflerim:

A) C: \ users \ OddThinking \ Documents \ Kaynağım \ Widget \ foo .src

Vim buna dosya kökü diyor (: help dosya adı değiştiricileri)

B) C: \ users \ OddThinking \ Documents \ Kaynağım \ Widget \ foo.src

dosya adı veya temel ad

C) C: \ users \ OddThinking \ Documents \ Kaynağım \ Widget \ foo. src (nokta olmadan)

dosya / isim uzantısı

D) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src (noktalı)

ayrıca dosya uzantısı . Nokta olmadan saklayın, bir dosyada nokta yoksa, uzantısı yoktur

E) C: \ users \ OddThinking \ Documents \ Kaynağım \ Widget \ foo.src

Ağacın tepesi Kural
yok, git buna temel dizin der

F) C: \ users \ OddThinking \ Documents \ Kaynağım \ Widget \ foo.src

ağacın tepesinden yaprak
göreli yoluna giden yol

G) C: \ users \ OddThinking \ Documents \ Kaynağım \ Widget \ foo.src

ağacın bir düğümü
konvansiyon yok, belki basit bir dizin

H) C: \ users \ OddThinking \ Documents \ Kaynağım \ Widget \ foo.src

dir ismi

I) C: \ users \ OddThinking \ Documents \ Kaynağım \ Widget \ foo.src

tam / mutlak yol


8
Konu dışı oluyor, ancak uzantının noktadan ayrı olarak depolanmasına dikkat edin. "Foo", "foo" dosya adlarını işlemeniz gerekir. ve "fan.txt" (ve hatta "foo.txt.bak".)
Oddthinking

1
merhaba arkadaşlar, harika bir örnek. Yanıtı yukarı kaydırmaya zorlayan referanslar kullanmak yerine sorunun yanına koyarsanız okumak daha kolay olur. Bunu geliştirmek için bu arada bir düzenleme yapıyorum. Grettings
Victor

3
Victor, düzenlemenin reddedildiğinden beri (wtf çocuklar, bu çok iyi bir gelişme!) Sadece kendim yaptım :-)
blinry

1
İçin 1.(sadece uzantısı olmadan dosya adı), beraber gitmeye karar File Titlenedeniyle küresel konsensüs net bir anlaşmanın ya da en azından eksikliği bir süre önce.
polyvertex


36

Öncelikle iyi bir soru, +1. Bir kez Utility sınıfında bir dizi işlev oluşturmak zorunda kaldığımda bu şey beni rahatsız etti. GetFilename? veya GetFullName? GetApplicationPath tam yol veya dizin adı anlamına mı geliyor? ve bunun gibi. Ben .NET arka plan geliyor, bu yüzden @blinry tarafından başka türlü mükemmel cevap biraz daha ekleyebilirsiniz düşünüyorum.

Özet: (İtalik olarak programcı olarak kullanmayacağım şey)

  1. Yol : Yol, dosya sisteminde benzersiz bir konum belirtir (göreli yolu olmadığı sürece). Yol adı daha az kullanılır, ancak yolla yapışırdım - ne olduğunu açıklar. Yol bir dosyaya veya klasöre hatta hiçbir şeye işaret etmeyebilir (C: \). Yol şunlar olabilir:

    1. Göreli Yol : My Source\Widget\aynı zamanda göreli yoldur Widget\foo.src. Kendini açıklayıcı.
    2. Mutlak Yol veya Tam Yol : Hedefi gösteren tam yol. İkincisini daha sık kullanma eğilimindeyim. C:\users\OddThinking\Documents\My Source\Widget\foo.srcdolayısıyla tam yol. Sonunda bir dosyaya işaret eden ve dizin olarak biten tam yol dediğimi görün.

    Wiki sayfası ve .NET adlandırma yoluna tutarlıdır.

  2. Kök Yolu veya Kök Dizini : UNIX çevrelerinde eski .NET kuralındayken eski. Her ikisini de sevmeme rağmen eskisini daha çok kullanma eğilimindeyim. Windows'da, UNIX'in aksine, her bölüm için bir tane olmak üzere birçok farklı kök yolu vardır. Unix sistemleri, diğer dizinler ve dosyalar hakkında bilgi tutan bir kök dizine sahiptir. Örneğin. C:\kök yoludur.

  3. Klasör veya Klasör Adı : Widget, OddThinkingvb senin durumunda. Bu sadece bir Windows kongre olabilir (aslında kendi garip düşüncem :)), yine de güçlü bir şekilde "Dizin" cevabına itiraz ediyorum. Normal bir kullanıcı dizini bir klasör (alt klasörler, alt dizinler gibi) ile aynı anlama gelse de , teknik açıdan "dizin" hedefin değil, hedefe nitelikli bir adres gibi gelmesi gerektiğine inanıyorum. Aşağıda daha fazlası.

    1. Alt Klasörler : Alt klasörlere göre users OddThinkingve Documentsalt klasörlerdir.
    2. Alt Dizinler : bakımından etmek users OddThinking\, OddThinking\Documents\ve OddThinking\Documents\My Source\Widget\alt dizinleri vardır. Ama sık sık bununla uğraşmak zorunda değiliz, değil mi?
    3. users OddThinkingAlt Klasör : Buna göre bir alt klasör (alt klasör olduğu gibi)
    4. Ana Klasör : OddThinking usersOnun ana klasörü (Sadece farklı terminolojilerden bahsetmek, önemli değil).
  4. Dizin veya Dizin Adı : Genellikle gerçek hayatta kullanılacak, ikincisi kodda olmalıdır. Bu , hedefin üst klasörüne kadar tam yol (veya yalnızca tam yol ) anlamına gelir . Sizin durumunuzda, (Evet, bir dizin hiçbir zaman bir dosyayı göstermez). Dizin .NET'te bir sınıf olduğundan ve Dizin Adı kütüphanenin kendisini çağırdığı için kodumda dizin adını kullanıyorum. UNIX sistemlerinde kullanılan dirname ile oldukça tutarlıdır .C:\users\OddThinking\Documents\My Source\Widget

  5. Dosya Adı veya Taban Adı: Dosyanın uzantısıyla birlikte adı. Senin durumunda: foo.src. Teknik olmayan bir kullanım için dosya adını tercih ederim (son kullanıcı için ne anlama gelir), ancak teknik amaçlar için kesinlikle basename ile yapışırdım . Dosya Adı genellikle MS tarafından kullanılır, ancak yalnızca belgelerde değil, kütüphanede bile nasıl tutarlı olduklarına şaşırıyorum . Dosya adı, taban adı veya dosyanın tam yolu anlamına gelebilir. Bu yüzden basename'i tercih ediyorum, onlara kod olarak adlandırıyorum. Wiki'deki bu sayfa da dosya adının tam yol veya taban adı anlamına gelebileceğini söylüyor. Şaşırtıcı bir şekilde bile .NET bile dosyanın kök adı anlamına kullanım basename bulabilirsiniz.

  6. Uzantı veya Dosya Adı Uzantı veya Dosya Uzantısı : Sonuncusunu beğendim. Hepsi aynı şeyi ifade eder, ama yine de bir tartışma konusudur! Wiki , o srczamanlar birçok dilin bunu yorumladığını okuduğumu hatırlıyorum .src. Noktaya dikkat edin. Yani bir kez daha benim almak, gündelik kullanımlar için ne olduğu önemli değil, ama bir programcı olarak uzantıyı her zaman olarak görüyorum .src.

    Tamam, bazı standart kullanımları getirmeye çalışmış olabilirim, ama işte takip ettiğim iki konvansiyonum. Ve tam yollarla ilgili.

    1. Genellikle bir dosyaya dosya yolu olarak işaret eden tam yolu çağırırım . Bana göre dosya yolu açık, bana ne olduğunu söyler. Dosya adıyla ben dosyanın adı olarak bulmak rağmen, benim kodda diyoruz dosya adı . Ayrıca " dizin adı " ile de tutarlıdır . Teknik açıdan, ad tam adı belirtir! Sinir bozucu. NET terim dosya adı (burada benim durumum var) ve bazen bunun için dosya yolu kullanır.

    2. Bir dizin dizin olarak biten tam bir yol çağırıyorum. Aslında, bir dosyaya bir dizini göstermeyen herhangi bir adres parçası çağrılabilir. Yani C:\users\OddThinking\Documents\My Source\bir dizin, C:\users\OddThinking\bir dizin ya da hatta OddThinking\Documents\My Source\(alt dizin olarak adlandırmak daha iyi ya da daha iyi göreceli yol - her şey onunla uğraştığınız bağlama bağlıdır). Yukarıda, dizin adı olan dizin hakkında farklı bir şeyden bahsettim. İşte benim görüşüm: Karışıklığı önlemek için yeni bir yol alacağım. Bu D:\Fruit\Apple\Pip\nedir? Bir dizin. Ancak soru dizinin veya daha iyi dizin adının ne olduğu ise D:\Fruit\Apple\Pip\, cevaptır D:\Fruit\Apple\. Umarım açıktır.

    Son iki terim için endişelenmemenin daha iyi olduğunu söyleyebilirim, çünkü en karışıklığı yaratan şey (benim için kişisel olarak). Tam yol terimini kullanmanız yeterli !

Size cevap vermek için:

  1. verdiğiniz yolla ilgili olarak

    A) Hiçbir fikrim yok. Her neyse, bunu yalnız yapmam gerekmedi.

    B) taban adı

    C) Ben sadece şu an için dosya uzantısı olarak adlandırırdım, en az endişe duydum çünkü kodumda tek başına tek başına ihtiyaç duymadım.

    D) dosya uzantısı kesinlikle.

    E) Bunun genel amaçlı bir gereklilik olduğunu düşünmüyorum. Fikrim yok. .NET taban dizininde dizin adıyla aynıdır.

    F) bağıl yol

    G) klasörü (ana klasörden taban adına foo.src)

    H) dizin adı

    I) tam yol (hatta dosya adı)

  2. genel olarak (biraz ayrıntılı olduğu için üzgünüm, sadece eve götürmek için) ama foo.srcaslında bir dosya olduğunu varsayarsak

    A) NA

    B) taban adı

    C) NA

    D) uzatma

    E) dizin veya basitçe yol

    F) bağıl yol

    G) NA

    H) dizin veya basitçe yol

    I) tam yol (hatta dosya adı)

Yanımda bir örnekle daha fazla sürüş:

  1. Yolu düşünün C:\Documents and Settings\All Users\Application Data\s.sql.

    1. C:\Documents and Settings\All Users\Application Data\s.sql tam yol (bir dosya adıdır)
    2. C:\Documents and Settings\All Users\Application Data\ dizin adıdır.
  2. Şimdi yolu düşünün C:\Documents and Settings\All Users\Application Data

    1. C:\Documents and Settings\All Users\Application Data tam yol (bir dizin olur)
    2. C:\Documents and Settings\All Users dizin adıdır.

İki ipucum:

  1. Türüne bakılmaksızın tam bir adrese gelince, neredeyse her zaman "tam yol" diyorum. Bu sadece dosya yolu ve klasör yolu için iki terminolojinin kullanımını ortadan kaldırmakla kalmaz, aynı zamanda dosya adını dosya adı olarak adlandırırsanız (çoğu kullanıcı için hemen basename anlamına gelir) olası karışıklığı önler. Ancak evet, yolun türü hakkında spesifik olmanız gerekiyorsa, daha genel "yol" yerine dosya adını veya dizini adlandırmak daha iyidir.

  2. Her neyse, kendi fikrinizi aklınızda bulundurun, onunla tutarlı olun. Ekip üyeleri arasında bunun değil, bunun anlamı olduğu konusunda fikir birliğine varın.

Şimdi sadece çemberden biraz pratik yapıyorum. Yeni bir terim markası OS X ve android makinelerde kullanılanlar olacaktır. Ve tüm bunlar sadece dosya sistemindeki fiziksel yollarla ilgilidir. Web adreslerinde yepyeni bir terminoloji seti ortaya çıkacaktır. Birinin aynı iş parçacığında boşluğu doldurmasını bekliyorum :) İlerlemiş olduğunuz sözleşmeyi duymaktan memnuniyet duyarım ..


Uzun bir süredir, tam dosya adı da dahil olmak üzere mutlak yolu ifade etmek için "pathname" kelimesini kullanıyorum. Cevabınız, buradaki diğer kişiler ve başka yerlerdeki kaynaklar bununla ilgili fikrimi değiştirdi ve şimdi bunun için "tam yol", dosya adı olmayan konum için "yol" ve dosya adı için "dosya adı" veya "ad" kelimesini kullanacağım kendisi.
Nate

24

C ++ 'da, Boost.Filesystem bir yolun çeşitli bölümleri için bir adlandırma tasarlamıştır. Ayrıntılar için yol ayrışma referans belgelerine ve bu eğiticiye bakın .

İşte öğreticiye dayalı bir özet. İçin:

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

olsun:

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 ++ standardı ISO / IEC 14882: 2017

Ayrıca Boost.Filesystem terminolojisi C ++ 17 =>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

6
O zaman her şeye ne diyorlar? path, fullpath?
wisbucky

@wisbucky Her şeye adlandırmalarında "yol" denir.
Emile Cormier

1
@wisbucky Bağlantı düzeltildi. Teşekkürler.
Emile Cormier

@olibre: C ++ 17 güncellemesi için teşekkürler. Ancak dosya adınınstem() bir parçasıdır , yolun değil .
Emile Cormier

1
@ johnc.j. Bu çok kötü Boost.Dosya ilk soru sorulduğunda o kadar iyi bilinmiyordu. Kendi başıma bir şeyler yapmak yerine hakemli bir kütüphanenin isimlendirilmesini benimsemeyi tercih ederim.
Emile Cormier

9

Python'un pathlibstandart kütüphanesinde yol bileşenleri için harika bir adlandırma kuralı vardır: https://docs.python.org/3/library/pathlib.html

a) C: \ users \ OddThinking \ Documents \ Kaynağım \ Widget \ foo .src

kök

b) C: \ users \ OddThinking \ Documents \ Kaynağım \ Widget \ foo.src

isim

c) C: \ users \ OddThinking \ Documents \ Kaynağım \ Widget \ foo. src (nokta olmadan)

[hiçbir şey değil]

d) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src (noktalı)

sonek

e) C: \ users \ OddThinking \ Documents \ Kaynağım \ Widget \ foo.src

büyük ebeveyn yolu

f) C: \ users \ OddThinking \ Documents \ Kaynağım \ Widget \ foo.src

büyük ebeveyn yoluna göreceli yol

g) C: \ users \ OddThinking \ Documents \ Kaynağım \ Widget \ foo.src

ebeveyn adı

h) C: \ users \ OddThinking \ Documents \ Kaynağım \ Widget \ foo.src

ebeveyn yolu

i) C: \ users \ OddThinking \ Documents \ Kaynağım \ Widget \ foo.src

yol


8

Hayır sen deli değilsin.

Windows sistemlerinde, bazen dosyayı içeren dizinin yoluna yol denir , bu da en başından beri olduğu şekildedir. Yani mesela,

    x:\dir1\dir2\myfile.txt

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

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

Unix / Linux yaklaşımı çok daha mantıklıdır ve yukarıda herkesin bahsettiği budur: dosya adının kendisini içeren yol. Ancak, "call /?" Windows komut satırında şunu elde edersiniz:

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

"Sadece yol" ve "sadece dosya adı" var. Aynı zamanda, tüm dizeye sürücü harfi artı yol artı dosya adı olarak anlaşılan "tam yol adı" adını verir. Yani gerçek bir gerçek yok. Bu nafile. Sen ihanete uğradın.

Neyse,

Soruna cevap vermek için

Örneklerinizi şöyle adlandırırım:

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

ADEF'in basit takma adları yoktur. Ve php muhtemelen en yaygın olarak bilinen çapraz platform dili olduğundan, herkes "basename" ve "dirname" kelimelerini anlar, bu yüzden bu isme bağlı kalırım. Tam ad da açıktır; tam yol biraz belirsiz olurdu ama çoğu zaman aynı şey demektir.


1
Uzun bir süredir, tam dosya adı da dahil olmak üzere mutlak yolu ifade etmek için "pathname" kelimesini kullanıyorum. Buradaki diğer cevaplar ve başka yerlerdeki kaynaklar bu konuda fikrimi değiştirdi ve şimdi bunun için "tam yol" kelimesini, dosya adı olmayan konum için "yol" ve dosya adının kendisi için "dosya adı" veya "ad" kullanacağım.
Nate
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.