Tên tập tin? Tên đường dẫn? Tên cơ sở? Đặt tên tiêu chuẩn cho các phần của một con đường


228

Tôi liên tục gặp rắc rối khi thao túng các đường dẫn và tên tệp, vì tôi không có một hệ thống đặt tên chung mà tôi sử dụng.

Tôi cần đưa ra một tiêu chuẩn đặt tên và tuân theo nó, và tôi muốn rõ ràng và nhất quán với những người khác, vì vậy tôi đang mở ra để tìm hiểu các câu trả lời kinh điển.

Xem xét vấn đề đồ chơi này: (ví dụ về Windows, nhưng hy vọng câu trả lời phải độc lập với nền tảng)

Bạn đã được cung cấp tên đầy đủ của một thư mục: C: \ users \ OddThinking \ Documents \ My Source. Bạn muốn đi bộ các thư mục bên dưới và biên dịch tất cả .src thành .obj.

Tại một số điểm bạn đang xem chuỗi sau đây.

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

Vì vậy, những tên định danh bạn sẽ sử dụng cho các bộ phận?

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

Hãy để tôi đưa ra một số câu trả lời, để giúp bạn bắt đầu.

A) tên cơ sở?

B) tên tập tin? Hay là tên tập tin? Sự khác biệt rất quan trọng khi chọn tên định danh và tôi không bao giờ nhất quán ở đây.

C) Gia hạn

D) Gia hạn. Đợi đã, đó là những gì tôi đã gọi C. Tôi có nên tránh lưu trữ dấu chấm và chỉ cần đặt vào khi cần thiết? Điều gì nếu không có dấu chấm trên một tập tin cụ thể?

H) tên đường dẫn? Hay chờ đợi, nó chỉ là con đường?

I) tên tệp. Đợi đã, đó là những gì tôi gọi là C. Path. Đợi đã, đó là cái mà tôi gọi là H. Có lẽ H nên là tên thư mục. Tuy nhiên, "thư mục" không phải là một thuật ngữ dành riêng cho Windows?


Mike Pope, một biên tập viên kỹ thuật tại Microsoft, đã chỉ ra trên blog của mình rằng trong khi hướng dẫn kiểu Microsoft liên tục dính vào hai từ: tên tệp, tên thư mục, tên âm lượng, thì Apple Style Guide đôi khi kết hợp với chúng: tên tệp, tên đường dẫn, tên âm lượng .
Oddthinking

A) chắc chắn không được gọi là tên cơ sở vì tên cơ sở đã được sử dụng ở nhiều nơi có nghĩa là mục cuối cùng trong một đường dẫn (đối với một tệp, đó sẽ là tên tệp không có dirpath). Một số nơi gọi tên tệp mà không mở rộng stem.
wisbucky

Ngoài ra, đối với các tệp có nhiều dấu chấm (ví dụ: foo.src.txt), có cách nào để xác định (và đặt tên) tiêu chuẩn cho phần mở rộng / s không?
dùng117529

Câu trả lời:


178

Tôi nghĩ rằng tìm kiếm của bạn cho một quy ước đặt tên "tiêu chuẩn" sẽ là vô ích. Dưới đây là các đề xuất của tôi, dựa trên các chương trình nổi tiếng hiện có:

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

Vim gọi nó là tập tin gốc (: trợ giúp sửa đổi tên tệp)

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

tên tệp hoặc tên cơ sở

C) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo. src (không có dấu chấm)

mở rộng tập tin / tên

D) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src (có dấu chấm)

cũng mở rộng tập tin . Đơn giản chỉ cần lưu trữ mà không có dấu chấm, nếu không có dấu chấm trên một tệp, nó không có phần mở rộng

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

đầu cây
Không có quy ước, git gọi nó là thư mục cơ sở

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

đường dẫn từ ngọn cây đến
đường đi của lá

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

một nút của cây
không có quy ước, có thể là một thư mục đơn giản

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

tên thư mục

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

đường dẫn đầy đủ / tuyệt đối


8
Nó lạc đề, nhưng hãy cẩn thận với việc lưu trữ phần mở rộng tách biệt với dấu chấm. Bạn cần xử lý tên tệp của "foo", "foo." và "foo.txt" (và thậm chí "foo.txt.bak".)
ngày

1
chào các bạn, ví dụ tuyệt vời Sẽ dễ đọc hơn nếu bạn đặt câu trả lời bên cạnh câu hỏi, thay vì sử dụng các tài liệu tham khảo buộc phải cuộn lên. Tôi thực hiện chỉnh sửa để cải thiện điều đó. Cài đặt
Victor

3
Victor, vì bản chỉnh sửa của bạn đã bị từ chối (wtf guys, đây là một cải tiến rất tốt!) Tôi chỉ tự mình làm điều đó :-)
blinry

1
Đối với 1.(chỉ tên tệp mà không có phần mở rộng), tôi đã quyết định sử dụng File Titletừ lâu do thiếu một quy ước rõ ràng hoặc ít nhất là sự đồng thuận toàn cầu.
polyvertex

1
Đối với A(tên tệp không có phần mở rộng), bạn có thể sử dụng stem. Tài liệu tham khảo: doc.rust-lang.org/std/path/struct.Path.html#method.file_stem , llvm.org/docs/doxygen/html/iêu , boost.org/doc/libs/1_60_0/libs/filesystem/ doc /
Bắn

36

Câu hỏi hay trước hết là +1 của tôi. Điều này đã làm tôi khó chịu khi tôi phải tạo ra một loạt các chức năng trong lớp Utility một lần. Tên GetFile? hoặc GetFullName? GetApplicationPath có nghĩa là đường dẫn đầy đủ hoặc tên thư mục? và như thế. Tôi đến từ nền .NET, vì vậy tôi nghĩ rằng tôi có thể thêm ít hơn vào câu trả lời xuất sắc của @blinry.

Tóm tắt: (In nghiêng là những gì tôi sẽ không sử dụng như một lập trình viên)

  1. Đường dẫn : Đường dẫn chỉ định một vị trí duy nhất trong hệ thống tệp (trừ khi đường dẫn tương đối của nó). Tên đường dẫn ít được sử dụng, nhưng tôi sẽ gắn bó với đường dẫn - nó giải thích khá nhiều về nó. Đường dẫn có thể trỏ đến một tệp hoặc một thư mục hoặc thậm chí không có gì (C: \). Đường dẫn có thể là:

    1. Đường dẫn tương đối : My Source\Widget\là đường dẫn tương đối cũng như Widget\foo.src. Tự giải thích.
    2. Đường dẫn tuyệt đối hoặc Đường dẫn đầy đủ : Là đường dẫn đủ điều kiện trỏ đến mục tiêu. Tôi có xu hướng sử dụng sau thường xuyên hơn. C:\users\OddThinking\Documents\My Source\Widget\foo.srcDo đó là con đường đầy đủ. Xem ở phần cuối tôi gọi đường dẫn đầy đủ trỏ đến một tệp và kết thúc dưới dạng một thư mục.

    Các trang wiki và NET đặt tên cho con đường phù hợp.

  2. Root Path hoặc Root Directory : Trước đây là quy ước .NET trong khi sau đó được nghe nhiều hơn trong các vòng tròn UNIX. Mặc dù tôi thích cả hai nhưng tôi có xu hướng sử dụng trước đây nhiều hơn. Trong các cửa sổ, không giống như UNIX, có nhiều đường dẫn gốc khác nhau, mỗi đường dẫn cho mỗi phân vùng. Các hệ thống Unix có một thư mục gốc chứa thông tin về các thư mục và tệp khác. Ví dụ. C:\là đường dẫn gốc.

  3. Thư mục hoặc Tên thư mục : Widget, OddThinkingvv trong trường hợp của bạn. Đây có thể là một quy ước duy nhất của Windows (thực tế là suy nghĩ kỳ quặc của riêng tôi :)), tuy nhiên tôi rất phản đối câu trả lời "Thư mục" của Blinry. Mặc dù đối với một thư mục người dùng bình thường có nghĩa giống như một thư mục (như thư mục con, thư mục con), tôi tin rằng từ "thư mục" góc kỹ thuật sẽ nghe giống như một địa chỉ đủ điều kiện cho mục tiêu chứ không phải chính mục tiêu. Thêm bên dưới.

    1. Thư mục con : Đối với users OddThinkingDocumentslà các thư mục phụ.
    2. Thư mục con : Đối với users OddThinking\, OddThinking\Documents\OddThinking\Documents\My Source\Widget\là thư mục phụ. Nhưng chúng ta thường không cần bận tâm về nó, phải không?
    3. Thư mục con : Đối với users OddThinkingthư mục con (cũng như thư mục con)
    4. Thư mục gốc : For OddThinking userslà thư mục mẹ của nó (Chỉ cần đề cập đến các thuật ngữ khác nhau, không có vấn đề gì lớn).
  4. Thư mục hoặc Tên thư mục : Cái trước để sử dụng nói chung trong cuộc sống thực, cái sau để được mã. Điều này đề cập đến đường dẫn đủ điều kiện (hoặc đơn giản là đường dẫn đầy đủ ) cho đến thư mục mẹ của mục tiêu . Trong trường hợp của bạn, C:\users\OddThinking\Documents\My Source\Widget(Có, một thư mục không bao giờ có nghĩa là trỏ đến một tệp). Tôi sử dụng tên thư mục trong mã của mình vì thư mục là một lớp trong .NET và Tên thư mục là cái mà chính thư viện gọi nó. Nó khá phù hợp với dirname được sử dụng trong các hệ thống UNIX.

  5. Tên tệp hoặc tên cơ sở : Tên của tệp cùng với phần mở rộng. Trong trường hợp của bạn : foo.src. Tôi sẽ nói rằng đối với việc sử dụng phi kỹ thuật, tôi thích tên tệp hơn (đó là ý nghĩa của người dùng cuối) nhưng vì mục đích kỹ thuật, tôi sẽ tuân thủ nghiêm ngặt tên cơ sở . Tên tệp thường được sử dụng bởi MS, nhưng tôi ngạc nhiên về cách chúng không nhất quán không chỉ trong tài liệu mà ngay cả trong thư viện . Tên tệp có thể có nghĩa là tên cơ sở hoặc đường dẫn đầy đủ của tệp. Vì vậy, tôi ủng hộ tên cơ sở, đó là những gì tôi gọi chúng trong mã. Trang này trên wiki cũng cho biết tên tệp có thể có nghĩa là đường dẫn đầy đủ hoặc tên cơ sở. Đáng ngạc nhiên ngay cả trong .NET tôi có thể tìm thấy tên cơ sở sử dụng có nghĩa là tên gốc của tệp.

  6. Mở rộng hoặc Tên tập tin mở rộng hoặc File Extension : Tôi như người cuối cùng. Tất cả đề cập đến cùng một điều nhưng nó lại là một vấn đề tranh luận! Wiki nói rằng đó là srckhi tôi nhớ rằng nhiều ngôn ngữ diễn giải nó như là .src. Lưu ý dấu chấm. Vì vậy, một lần nữa, tôi thường sử dụng nó, không quan trọng nó là gì, nhưng là một lập trình viên, tôi luôn thấy phần mở rộng là .src.

    Ok tôi có thể đã cố gắng lấy một số cách sử dụng tiêu chuẩn, nhưng đây là hai trong số những quy ước của tôi mà tôi tuân theo. Và đó là về con đường đầy đủ.

    1. Tôi thường gọi một đường dẫn đầy đủ trỏ đến một tệp là đường dẫn tệp . Đối với tôi đường dẫn tệp bị cắt rõ ràng, nó cho tôi biết nó là gì. Mặc dù với tên tệp tôi thấy nó là tên của tệp, trong mã của tôi, tôi gọi nó là tên tệp . Nó cũng phù hợp với " tên thư mục ". Từ khía cạnh kỹ thuật, tên đề cập đến tên đủ điều kiện! Frustratingly .NET sử dụng tên tệp thuật ngữ (vì vậy tôi có trường hợp của tôi ở đây) và đôi khi đường dẫn tệp cho việc này.

    2. Tôi gọi một đường dẫn đầy đủ kết thúc như một thư mục một thư mục. Trong thực tế, người ta có thể gọi bất kỳ phần địa chỉ nào không trỏ đến một tập tin một thư mục. Vì vậy, C:\users\OddThinking\Documents\My Source\một thư mục, C:\users\OddThinking\là một thư mục, hoặc thậm chí OddThinking\Documents\My Source\(tốt hơn để gọi nó là thư mục phụ hoặc đường dẫn tương đối tốt hơn - tất cả phụ thuộc vào bối cảnh bạn đang xử lý nó). Vâng, tôi đã đề cập đến một cái gì đó khác nhau về thư mục đó là tên thư mục. Đây là ý kiến ​​của tôi: Tôi sẽ có một con đường mới để tránh nhầm lẫn. Đây là cái D:\Fruit\Apple\Pip\gì Một thư mục. Nhưng nếu câu hỏi là thư mục hoặc tên thư mục tốt hơn là gì D:\Fruit\Apple\Pip\, câu trả lời là D:\Fruit\Apple\. Hy vọng nó rõ ràng.

    Tôi muốn nói rằng tốt hơn hết là đừng lo lắng về hai điều khoản cuối cùng vì đó là điều tạo ra sự nhầm lẫn nhất (đối với cá nhân tôi). Chỉ cần sử dụng thuật ngữ đầy đủ đường dẫn !

Để trả lời bạn:

  1. đối với con đường bạn đã đưa ra

    A) Không có ý tưởng. Dù sao tôi không bao giờ cần phải có một mình.

    B) tên cơ sở

    C) Tôi sẽ chỉ gọi nó là phần mở rộng tập tin, tôi ít lo lắng nhất vì tôi không bao giờ cần phải đặt tên một mình trong mã của mình.

    D) mở rộng tập tin chắc chắn.

    E) Tôi không nghĩ rằng đây là một yêu cầu mục đích chung. Không ý kiến. Trong thư mục cơ sở .NET giống như tên thư mục.

    F) đường dẫn tương đối

    Thư mục G) (thư mục mẹ đến tên cơ sở foo.src)

    H) tên thư mục

    I) đường dẫn đầy đủ (hoặc thậm chí tên tệp)

  2. nói chung (xin lỗi vì hơi dài dòng, chỉ để lái xe về nhà) nhưng giả sử đó foo.srcthực sự là một tập tin

    A) NA

    B) tên cơ sở

    C) NA

    D) mở rộng

    E) thư mục hoặc đơn giản là đường dẫn

    F) đường dẫn tương đối

    G) NA

    H) thư mục hoặc đơn giản là đường dẫn

    I) đường dẫn đầy đủ (hoặc thậm chí tên tệp)

Lái xe hơn nữa với một ví dụ từ phía tôi:

  1. Hãy xem xét con đường C:\Documents and Settings\All Users\Application Data\s.sql.

    1. C:\Documents and Settings\All Users\Application Data\s.sql là đường dẫn đầy đủ (là tên tệp)
    2. C:\Documents and Settings\All Users\Application Data\ là tên thư mục.
  2. Bây giờ hãy xem xét đường dẫn C:\Documents and Settings\All Users\Application Data

    1. C:\Documents and Settings\All Users\Application Data là đường dẫn đầy đủ (xảy ra là một thư mục)
    2. C:\Documents and Settings\All Users là tên thư mục.

Hai lời khuyên của tôi:

  1. Tôi tuân theo quy tắc này rằng khi nói đến việc giải quyết một địa chỉ đầy đủ bất kể loại đó là gì, tôi hầu như luôn gọi nó là "đường dẫn đầy đủ". Điều này không chỉ loại bỏ việc sử dụng hai thuật ngữ cho đường dẫn tệp và đường dẫn thư mục, nó cũng tránh được sự nhầm lẫn tiềm ẩn nếu bạn định đặt tên tệp đó là tên tệp (mà hầu hết người dùng sẽ dịch ngay tên cơ sở). Nhưng có, nếu bạn phải cụ thể về loại đường dẫn, tốt hơn là đặt tên sau đó tên tệp hoặc thư mục thay vì "đường dẫn" chung chung hơn.

  2. Dù đó là gì bạn sẽ có ý tưởng của riêng mình trong đầu, hãy kiên định với nó trong suốt. Có sự đồng thuận giữa các thành viên trong nhóm rằng điều này có nghĩa là điều này và không phải điều đó.

Bây giờ chỉ từ vòng tròn tôi có một số thực hành. Một thương hiệu thuật ngữ mới sẽ là những gì được sử dụng trên các máy OS X và Android. Và tất cả những điều này chỉ là về các đường dẫn vật lý trong hệ thống tập tin. Một loạt các thuật ngữ hoàn toàn mới sẽ phát sinh trong trường hợp địa chỉ web. Tôi hy vọng ai đó sẽ lấp đầy khoảng trống trong cùng chủ đề này :) Tôi sẽ rất vui khi nghe quy ước mà bạn đã đi trước ..


Trong một thời gian dài, tôi đã sử dụng từ "tên đường dẫn" để chỉ toàn bộ đường dẫn tuyệt đối bao gồm tên tệp đầy đủ. Câu trả lời của bạn, những người khác ở đây và các tài nguyên ở nơi khác đã thay đổi suy nghĩ của tôi về điều đó và bây giờ tôi sẽ sử dụng từ "fullpath" cho điều này, "đường dẫn" cho vị trí không có tên tệp và "tên tệp" hoặc "tên" cho tên tệp chinh no.
Nate

24

Trong C ++, Boost.Filesystem đã nghĩ ra một danh pháp cho các phần khác nhau của một đường dẫn. Xem tài liệu tham khảo phân rã đường dẫn để biết chi tiết, cũng như hướng dẫn này .

Đây là một bản tóm tắt dựa trên hướng dẫn. Dành cho:

  • Đường dẫn Windows: c:\foo\bar\baa.txt
  • Đường dẫn Unix: /foo/bar/baa.txt

bạn lấy:

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

Tiêu chuẩn C ++ ISO / IEC 14882: 2017

Hơn nữa, thuật ngữ Boost.Filesystem đã được áp dụng bởi C ++ 17 => Xemstd::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
Họ gọi toàn bộ sau đó là gì? path, fullpath?
wvducky 17/03/2016

@wisbucky Toàn bộ điều được gọi là "đường dẫn" theo danh pháp của chúng.
Cileier Cormier

1
@wvducky Đã sửa liên kết. Cảm ơn.
Cileier Cormier

@olibre: Cảm ơn bản cập nhật C ++ 17. Nhưng stem()là một phần của tên tệp , không phải là đường dẫn .
Cileier Cormier

1
@ johnc.j Thật tệ khi Boost.Filesystem không được biết đến nhiều khi câu hỏi được hỏi lần đầu tiên. Tôi thà chấp nhận danh pháp của một thư viện được đánh giá ngang hàng hơn là tự mình làm một cái gì đó.
Cileier Cormier

9

pathlibThư viện chuẩn của Python có một quy ước đặt tên tuyệt vời cho các thành phần đường dẫn: https://docs.python.org/3/l Library / pathlib.html

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

thân cây

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

Tên

c) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo. src (không có dấu chấm)

[không có gì]

d) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src (có dấu chấm)

hậu tố

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

con đường cha mẹ lớn

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

đường dẫn tương đối đến đường dẫn cha mẹ lớn

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

tên cha mẹ

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

con đường cha mẹ

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

con đường


8

Không, bạn không điên.

Trong các hệ thống Windows, đôi khi đường dẫn của thư mục chứa tệp được gọi là đường dẫn , đó là cách nó bắt đầu từ đầu. Ví dụ,

    x:\dir1\dir2\myfile.txt

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

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

Cách tiếp cận Unix / Linux hợp lý hơn rất nhiều và đó là những gì mọi người đã đề cập ở trên: đường dẫn bao gồm cả tên tệp. Tuy nhiên, nếu bạn gõ "cuộc gọi /?" trong dòng lệnh Windows, bạn nhận được điều này:

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

Vì vậy, đó là "chỉ đường dẫn" và "chỉ tên tệp". Đồng thời, họ gọi toàn bộ chuỗi là "tên đường dẫn đủ điều kiện" được hiểu là ký tự ổ đĩa cộng với đường dẫn cộng với tên tệp. Vì vậy, không có sự thật. Thật vô ích. Bạn đã bị phản bội.

Dù sao,

Để trả lời câu hỏi của bạn

Đây là cách tôi đặt tên cho các ví dụ của bạn:

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

ADEF không có biệt danh đơn giản. Và vì php có lẽ là ngôn ngữ đa nền tảng được biết đến rộng rãi nhất, mọi người đều hiểu "tên cơ sở" và "dirname" nên tôi gắn bó với cách đặt tên đó. Tên đầy đủ cũng rõ ràng; đường dẫn đầy đủ sẽ là một chút mơ hồ nhưng hầu hết thời gian nó có nghĩa là điều tương tự.


1
Trong một thời gian dài, tôi đã sử dụng từ "tên đường dẫn" để chỉ toàn bộ đường dẫn tuyệt đối bao gồm tên tệp đầy đủ. Các câu trả lời khác ở đây và các tài nguyên ở nơi khác đã thay đổi suy nghĩ của tôi về điều đó và bây giờ tôi sẽ sử dụng từ "fullpath" cho điều này, "đường dẫn" cho vị trí không có tên tệp và "tên tệp" hoặc "tên" cho tên tệp.
Nate
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.