Nama file? Nama jalur? Nama dasar? Penamaan standar untuk potongan jalan

228

Saya terus mendapatkan simpul ketika saya memanipulasi jalur dan nama file, karena saya tidak memiliki sistem penamaan umum yang saya gunakan.

Saya perlu membuat standar penamaan dan mematuhinya, dan saya ingin menjadi jelas dan konsisten dengan yang lain, jadi saya membuka diri untuk mempelajari jawaban kanonik.

Pertimbangkan masalah mainan ini: (Contoh Windows, tapi mudah-mudahan jawabannya harus independen terhadap platform)

Anda telah diberi nama lengkap folder: C: \ users \ OddThinking \ Documents \ My Source. Anda ingin menjalankan folder di bawahnya, dan kompilasi semua .src ke .obj.

Pada titik tertentu Anda melihat string berikut.

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

Jadi, nama pengidentifikasi apa yang akan Anda gunakan untuk bagian-bagian itu?

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

Biarkan saya memberikan beberapa jawaban, untuk membantu Anda memulai.

A) nama dasar?

B) nama file? Atau apakah itu nama file? Perbedaannya penting ketika memilih nama pengidentifikasi, dan saya tidak pernah konsisten di sini.

C) Perpanjangan

D) Perpanjangan. Tunggu, itu yang saya sebut C. Haruskah saya menghindari menyimpan titik, dan hanya memasukkan ketika diperlukan? Bagaimana jika tidak ada titik pada file tertentu?

H) nama jalur? Atau tunggu, apakah hanya jalannya?

I) nama file. Tunggu, itu yang saya sebut C. Path. Tunggu, itu yang saya sebut H. Mungkin H harus menjadi nama folder. Bukankah "folder" istilah khusus Windows?

Berpikir aneh
sumber
Mike Pope, seorang editor teknis di Microsoft, menunjukkan di blog - nya bahwa sementara panduan gaya Microsoft tetap konsisten pada dua kata: nama file, nama folder, nama volume, Panduan Gaya Apple terkadang bergabung dengan mereka: nama file, pathname, nama volume .
Oddthinking
A) seharusnya tidak boleh disebut basename karena basename sudah digunakan di banyak tempat untuk mengartikan item terakhir dalam path (untuk file, itu akan menjadi nama file tanpa dirpath). Beberapa tempat memanggil nama file tanpa ekstensi stem.
wisbucky
Juga, untuk file dengan beberapa periode (misalnya, foo.src.txt), apakah ada cara standar untuk mengidentifikasi (dan memberi nama) ekstensi?
user117529

Jawaban:

178

Saya pikir pencarian Anda untuk konvensi penamaan "standar" akan sia-sia. Berikut ini proposal saya, berdasarkan program-program terkenal yang sudah ada:

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

Vim menyebutnya sebagai root file (: help filename-modifiers)

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

nama file atau nama dasar

C) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo. src (tanpa titik)

ekstensi file / nama

D) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src (dengan titik)

juga mengajukan ekstensi . Cukup simpan tanpa titik, jika tidak ada titik pada file, itu tidak memiliki ekstensi

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

atas pohon
Tidak ada konvensi, git menyebutnya direktori dasar

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

jalur dari atas pohon ke
jalur relatif daun

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

satu simpul dari pohon
tanpa konvensi, mungkin direktori sederhana

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

nama dir

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

jalur penuh / absolut

blinry
sumber
8
Sudah keluar dari topik, tapi hati-hati dengan penyimpanan ekstensi yang terpisah ke titik. Anda perlu menangani nama file "foo", "foo." dan "foo.txt" (dan bahkan "foo.txt.bak".)
Oddthinking
1
Hai teman-teman, contoh yang bagus. Akan lebih mudah dibaca jika Anda meletakkan jawaban di sebelah pertanyaan, daripada menggunakan referensi yang memaksa untuk menggulir ke atas. Saya mengedit dengan cara untuk memperbaikinya. Grettings
Victor
3
Victor, karena hasil edit Anda ditolak (wtf guys, ini peningkatan yang sangat bagus!) Saya hanya melakukannya sendiri :-)
blinry
1
Untuk 1.(nama file saja tanpa ekstensi), saya memutuskan untuk pergi File Titledulu karena kurangnya konvensi yang jelas atau setidaknya konsensus global.
polyvertex
36

Pertanyaan bagus pertama-tama, +1 saya. Hal ini mengganggu saya ketika saya harus membuat banyak fungsi di kelas Utilitas sekali. GetFileName? atau GetFullName? GetApplicationPath berarti path lengkap atau nama direktori? dan seterusnya. Saya berasal dari latar belakang .NET, jadi saya pikir saya bisa menambahkan sedikit lebih banyak untuk jawaban yang sangat baik oleh @blinry.

Rangkuman: (Dalam huruf miring adalah hal yang tidak akan saya gunakan sebagai programmer)

  1. Path : Path menentukan lokasi unik dalam sistem file (kecuali path relatifnya). Nama path lebih jarang digunakan, tetapi saya akan tetap dengan path - cukup banyak menjelaskan apa itu. Path dapat menunjuk ke file atau folder atau bahkan tidak sama sekali (C: \). Path bisa:

    1. Relative Path : My Source\Widget\adalah jalur relatif juga Widget\foo.src. Cukup jelas.
    2. Absolute Path atau Full Path : Adalah jalur yang sepenuhnya memenuhi syarat yang menunjuk ke target. Saya cenderung lebih sering menggunakan yang terakhir. C:\users\OddThinking\Documents\My Source\Widget\foo.srckarenanya jalur penuh. Lihat di akhir apa yang saya sebut path lengkap yang menunjuk ke sebuah file dan yang berakhir sebagai direktori.

    The halaman wiki dan NET penamaan untuk jalan konsisten.

  2. Root Path atau Root Directory : Former adalah konvensi .NET sementara yang terakhir lebih terdengar di lingkaran UNIX. Meskipun saya suka keduanya, saya cenderung menggunakan yang pertama. Di windows, tidak seperti UNIX, memiliki banyak jalur root yang berbeda, satu untuk setiap partisi. Sistem Unix memiliki satu direktori root yang menyimpan informasi tentang direktori dan file lain. Misalnya. C:\adalah path root.

  3. Folder atau Nama Folder : Widget, OddThinkingdll dalam kasus Anda. Ini mungkin konvensi Windows saja (sebenarnya itu pemikiran aneh saya sendiri :)), namun saya sangat keberatan dengan blinry`s menjawab "Direktori". Meskipun untuk direktori pengguna normal berarti sama dengan folder (seperti subfolder, subdirektori), saya percaya dari sudut teknis "direktori" harus terdengar seperti alamat yang memenuhi syarat untuk target dan bukan target itu sendiri. Lebih jauh di bawah.

    1. Sub Folder : Sehubungan dengan users OddThinkingdan Documentsmerupakan sub folder.
    2. Sub Direktori : Sehubungan dengan users OddThinking\, OddThinking\Documents\dan OddThinking\Documents\My Source\Widget\merupakan sub direktori. Tapi kita tidak perlu repot tentang itu, kan?
    3. Folder Anak : Sehubungan dengan itu users OddThinkingadalah folder anak (dan juga folder)
    4. Folder Induk : For OddThinking usersadalah folder induknya (Hanya menyebutkan berbagai terminologi, bukan masalah besar).
  4. Direktori atau Nama Direktori : Yang pertama digunakan secara umum dalam kehidupan nyata, yang terakhir harus dalam kode. Ini mengacu pada jalur yang sepenuhnya memenuhi syarat (atau hanya path lengkap ) hingga folder induk target . Dalam kasus Anda, C:\users\OddThinking\Documents\My Source\Widget(Ya direktori tidak pernah dimaksudkan untuk menunjuk ke file). Saya menggunakan nama direktori dalam kode saya karena direktori adalah kelas dalam. NET dan Nama Direktori adalah apa perpustakaan itu sendiri menyebutnya. Cukup konsisten dengan dirname yang digunakan dalam sistem UNIX.

  5. Nama File atau Nama Basah : Nama file beserta ekstensi. Dalam kasus Anda: foo.src. Saya akan mengatakan bahwa untuk penggunaan non teknis saya lebih suka nama file (itu artinya pengguna akhir) tetapi untuk tujuan teknis saya akan tetap menggunakan nama samaran . Nama File sering digunakan oleh MS, tetapi saya terkejut bagaimana mereka tidak konsisten tidak hanya dalam dokumentasi tetapi bahkan di perpustakaan . Ada nama file yang bisa berarti nama file atau path lengkap file. Jadi saya mendukung nama kecil, itulah yang saya sebut dalam kode. Halaman ini di wiki juga mengatakan nama file bisa berarti path lengkap atau nama dasar. Anehnya bahkan dalam. NET saya dapat menemukan nama pengguna penggunaan berarti nama root file.

  6. Extension atau Nama File Extension atau File Extension : Saya suka yang terakhir. Semua mengacu pada hal yang sama tetapi apa lagi soal debat! Wiki mengatakan itusrc sementara waktu lalu saya ingat membaca bahwa banyak bahasa menafsirkannya sebagai .src. Perhatikan titiknya. Jadi sekali lagi pendapat saya adalah, untuk penggunaan biasa tidak masalah apa itu, tetapi sebagai seorang programmer saya selalu melihat ekstensi sebagai .src.

    Ok, saya mungkin telah mencoba mengambil beberapa penggunaan standar, tetapi di sini ada dua konvensi saya yang saya ikuti. Dan ini tentang jalur penuh.

    1. Saya biasanya memanggil path lengkap yang menunjuk ke file sebagai path file . Bagi saya path file sudah jelas, ini memberitahu saya apa itu. Meskipun dengan nama file saya menemukannya sebagai nama file, dalam kode saya saya menyebutnya nama file . Ini juga konsisten dengan " nama direktori ". Dari sisi teknis, nama mengacu pada nama yang sepenuhnya memenuhi syarat! Frustasi .NET menggunakan nama file istilah (jadi saya punya kasus saya di sini) dan kadang-kadang mengajukan path untuk ini.

    2. Saya menyebut path lengkap yang berakhir sebagai direktori direktori. Bahkan seseorang dapat memanggil setiap bagian dari alamat yang tidak menunjuk ke suatu file direktori. Demikian C:\users\OddThinking\Documents\My Source\juga direktori, C:\users\OddThinking\direktori, atau bahkan OddThinking\Documents\My Source\(lebih baik menyebutnya sub direktori atau bahkan jalur relatif lebih baik - semua itu tergantung pada konteks yang Anda hadapi). Jauh di atas saya menyebutkan sesuatu yang berbeda tentang direktori yang merupakan nama direktori. Inilah pendapat saya: Saya akan mendapatkan jalan baru untuk menghindari kebingungan. Apa ini D:\Fruit\Apple\Pip\? Direktori Tetapi jika pertanyaannya adalah apa itu direktori atau bahkan nama direktori yang lebih baik D:\Fruit\Apple\Pip\, jawabannya adalah D:\Fruit\Apple\. Semoga ini jelas.

    Saya akan mengatakan lebih baik tidak khawatir tentang dua istilah terakhir karena itulah yang paling membingungkan (bagi saya pribadi). Cukup gunakan istilah path lengkap !

Untuk menjawab Anda:

  1. sehubungan dengan jalan yang telah Anda berikan

    A) Tidak tahu. Ngomong-ngomong, aku tidak perlu mendapatkannya sendirian.

    B) nama dasar

    C) Saya hanya akan menyebutnya ekstensi file untuk saat ini, saya paling tidak khawatir karena saya tidak pernah membutuhkannya untuk disebutkan dalam kode saya.

    D) ekstensi file pasti.

    E) Saya tidak berpikir ini adalah persyaratan tujuan umum. Tidak ada ide. Dalam direktori .NET base sama dengan nama direktori.

    F) jalur relatif

    G) folder (folder induk ke nama dasar foo.src )

    H) nama direktori

    I) path lengkap (atau bahkan nama file)

  2. secara umum (maaf karena sedikit bertele-tele, hanya untuk mengarahkan titik rumah) tetapi dengan asumsi foo.src memang file

    A) NA

    B) nama dasar

    C) NA

    D) ekstensi

    E) direktori atau cukup path

    F) jalur relatif

    G) NA

    H) direktori atau cukup path

    I) path lengkap (atau bahkan nama file)

Mengemudi lebih jauh dengan satu contoh dari sisi saya:

  1. Pertimbangkan jalannya C:\Documents and Settings\All Users\Application Data\s.sql.

    1. C:\Documents and Settings\All Users\Application Data\s.sql adalah path lengkap (yang merupakan nama file)
    2. C:\Documents and Settings\All Users\Application Data\ adalah nama direktori.
  2. Sekarang perhatikan jalannya C:\Documents and Settings\All Users\Application Data

    1. C:\Documents and Settings\All Users\Application Data adalah path lengkap (yang merupakan direktori)
    2. C:\Documents and Settings\All Users adalah nama direktori.

Dua tips saya:

  1. Saya mengikuti aturan praktis ini bahwa ketika membahas alamat lengkap terlepas dari tipenya, saya hampir selalu menyebutnya "path lengkap". Ini tidak hanya menghilangkan penggunaan dua terminologi untuk path file dan path folder, tetapi juga menghindari potensi kebingungan jika Anda akan menamai file tersebut sebagai nama file (yang bagi sebagian besar pengguna segera diterjemahkan menjadi nama file). Tapi ya jika Anda harus spesifik tentang jenis path, lebih baik untuk memberi nama daripada nama file atau direktori daripada "path" yang lebih umum.

  2. Apa pun itu, Anda akan memiliki ide Anda sendiri dalam pikiran, konsisten dengan itu sepanjang. Memiliki konsensus di antara anggota tim bahwa ini berarti ini dan bukan itu.

Sekarang hanya dari lingkaran saya punya beberapa latihan. Merek istilah baru adalah apa yang digunakan pada OS X dan mesin android. Dan semua ini hanya tentang jalur fisik dalam sistem file. Seperangkat terminologi baru akan muncul jika alamat web. Saya berharap seseorang untuk mengisi kekosongan di utas yang sama ini :) Saya akan senang mendengar konvensi yang Anda ikuti sebelumnya.

nawfal
sumber
Untuk waktu yang lama saya telah menggunakan kata "pathname" yang berarti seluruh jalur absolut termasuk nama file lengkap. Jawaban Anda, orang lain di sini, dan sumber daya di tempat lain telah mengubah pikiran saya tentang hal itu, dan sekarang saya akan menggunakan kata "fullpath" untuk ini, "path" untuk lokasi tanpa nama file, dan "nama file" atau "nama" untuk nama file diri.
Nate
24

Dalam C ++, Boost.Filesystem telah menemukan nomenklatur untuk berbagai bagian dari jalur. Lihat dokumentasi referensi dekomposisi jalur untuk detail, serta tutorial ini .

Berikut ringkasan berdasarkan tutorialnya. Untuk:

  • Jalur Windows: c:\foo\bar\baa.txt
  • Lepaskan jalur: /foo/bar/baa.txt

Anda mendapatkan:

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

Standar C ++ ISO / IEC 14882: 2017

Apalagi terminologi Boost.Filesystem telah diadopsi oleh C ++ 17 => Lihatstd::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
sumber
6
Lalu apa yang mereka sebut semuanya? path, fullpath?
wisbucky
@wisbucky Semuanya disebut "path" dalam nomenklatur mereka.
Emile Cormier
1
@wisbucky Memperbaiki tautannya. Terima kasih.
Emile Cormier
@ Colibre: Terima kasih atas pembaruan C ++ 17. Tetapi stem()merupakan bagian dari nama file , bukan path .
Emile Cormier
1
@ johnc.j. Sayang sekali Boost.Filesystem tidak dikenal saat pertanyaan pertama kali diajukan. Saya lebih suka mengadopsi nomenklatur perpustakaan yang ditinjau oleh rekan sejawat daripada membuat sesuatu sendiri.
Emile Cormier
9

pathlibPustaka standar Python memiliki konvensi penamaan yang bagus untuk komponen lintasan: https://docs.python.org/3/library/pathlib.html

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

batang

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

nama

c) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo. src (tanpa titik)

[tidak ada]

d) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src (dengan titik)

akhiran

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

jalur grand parent

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

jalur relatif ke jalur grand parent

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

nama orang tua

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

jalur induk

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

jalan

Maggyero
sumber
8

Tidak, kamu tidak gila.

Dalam sistem Windows, kadang-kadang jalur direktori yang berisi file disebut jalur , yang seperti itu dari awal. Jadi, misalnya,

    x:\dir1\dir2\myfile.txt

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

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

Pendekatan Unix / Linux jauh lebih logis, dan itulah yang semua orang sebutkan di atas: path termasuk nama file itu sendiri. Namun, jika Anda mengetik "panggil /?" di baris perintah Windows, Anda mendapatkan ini:

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

Jadi begitulah, "path only" dan "file name only". Pada saat yang sama, mereka menyebut seluruh string sebagai "nama jalur yang memenuhi syarat" yang dipahami sebagai huruf drive plus jalur plus nama file. Jadi tidak ada kebenaran nyata. Itu sia-sia. Anda telah dikhianati.

Bagaimanapun,

Untuk menjawab pertanyaan Anda

Inilah cara saya memberi nama contoh Anda:

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

ADEF tidak memiliki nama panggilan sederhana. Dan karena php mungkin adalah bahasa lintas platform yang paling banyak dikenal, semua orang mengerti "nama dasar" dan "dirname" jadi saya akan tetap menggunakan penamaan itu. Nama lengkap juga jelas; path lengkap akan sedikit ambigu tetapi sebagian besar waktu itu berarti hal yang sama.

dkellner
sumber
1
Untuk waktu yang lama saya telah menggunakan kata "pathname" yang berarti seluruh jalur absolut termasuk nama file lengkap. Jawaban lain di sini dan sumber daya di tempat lain telah mengubah pikiran saya tentang itu, dan sekarang saya akan menggunakan kata "fullpath" untuk ini, "path" untuk lokasi tanpa nama file, dan "nama file" atau "nama" untuk nama file itu sendiri.
Nate