ชื่อไฟล์? ชื่อเส้นทาง ชื่อฐาน? การตั้งชื่อมาตรฐานสำหรับชิ้นส่วนของเส้นทาง


228

ฉันยังคงปมอยู่เสมอเมื่อฉันจัดการพา ธ และชื่อไฟล์เพราะฉันไม่มีระบบตั้งชื่อทั่วไปที่ฉันใช้

ฉันจำเป็นต้องมีมาตรฐานการตั้งชื่อและติดกับมันและฉันต้องการที่จะชัดเจนและสอดคล้องกับคนอื่น ๆ ดังนั้นฉันเปิดขึ้นเพื่อเรียนรู้คำตอบที่ยอมรับ

พิจารณาปัญหาของเล่นนี้: (ตัวอย่าง Windows แต่หวังว่าคำตอบควรเป็นแพลตฟอร์มอิสระ)

คุณได้รับชื่อเต็มของโฟลเดอร์: C: \ users \ OddThinking \ Documents \ My Source คุณต้องการเดินโฟลเดอร์ภายใต้และรวบรวม. src ทั้งหมดไปยัง. obj

ในบางจุดคุณกำลังดูสตริงต่อไปนี้

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

ดังนั้นชื่อตัวระบุใดที่คุณจะใช้สำหรับส่วนต่างๆ

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

ให้ฉันให้คำตอบเพื่อให้คุณเริ่มต้น

A) ชื่อฐาน?

B) ชื่อไฟล์? หรือเป็นชื่อไฟล์? ความแตกต่างมีความสำคัญเมื่อเลือกชื่อตัวระบุและฉันไม่สอดคล้องกันที่นี่

C) ส่วนขยาย

D) ส่วนขยาย เดี๋ยวก่อนนั่นคือสิ่งที่ฉันเรียกว่าซีฉันควรหลีกเลี่ยงการจัดเก็บจุดและเพียงแค่ใส่เมื่อจำเป็น? เกิดอะไรขึ้นถ้าไม่มีจุดในไฟล์ใดไฟล์หนึ่ง?

H) ชื่อเส้นทาง? หรือรอเป็นเพียงเส้นทางเท่านั้น

ฉัน) ชื่อไฟล์ รอนั่นคือสิ่งที่ฉันเรียกว่าเส้นทาง C. รอนั่นคือสิ่งที่ฉันเรียกว่าเอชบางทีเอชควรเป็นชื่อโฟลเดอร์ ไม่ใช่ "โฟลเดอร์" เป็นคำศัพท์เฉพาะของ Windows ใช่ไหม


Mike Pope บรรณาธิการด้านเทคนิคของ Microsoft ชี้ให้เห็นในบล็อกของเขาว่าในขณะที่คู่มือสไตล์ Microsoft ยึดติดกับสองคำอย่างต่อเนื่อง: ชื่อไฟล์ชื่อโฟลเดอร์ชื่อปริมาณชื่อคู่มือสไตล์ Apple บางครั้งก็รวมชื่อไฟล์ชื่อพา ธ ชื่อวอลุ่ม .
Oddthinking

A) ไม่ควรเรียกว่า basename อย่างแน่นอนเพราะ basename ถูกใช้แล้วในหลายสถานที่เพื่อหมายถึงรายการสุดท้ายในพา ธ (สำหรับไฟล์ที่จะเป็นชื่อไฟล์โดยไม่มี dirpath) stemสถานที่บางคนเรียกชื่อไฟล์โดยไม่ต้องขยาย
wisbucky

นอกจากนี้สำหรับไฟล์ที่มีหลายจุด (เช่น foo.src.txt) มีวิธีมาตรฐานในการระบุ (และตั้งชื่อ) ส่วนขยายหรือไม่?
user117529

คำตอบ:


178

ฉันคิดว่าการค้นหาแบบแผนการตั้งชื่อ "มาตรฐาน" ของคุณจะไร้ประโยชน์ นี่คือข้อเสนอของฉันตามโปรแกรมที่มีอยู่และเป็นที่รู้จักกันดี:

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

เรียกว่าไฟล์รูท (: help filename-modifiers)

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

ชื่อไฟล์หรือชื่อฐาน

C) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo src (ไม่มีจุด)

นามสกุลไฟล์ / ชื่อ

D) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src (มีจุด)

นอกจากนี้ยังมีส่วนขยายของแฟ้ม เพียงเก็บโดยไม่มีจุดถ้าไม่มีจุดบนไฟล์มันไม่มีส่วนขยาย

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

ด้านบนของต้นไม้
ไม่มีการประชุม git เรียกมันว่าไดเรกทอรีฐาน

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

เส้นทางจากด้านบนของต้นไม้ไปยัง
เส้นทางญาติใบ

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

หนึ่งโหนดของต้นไม้ที่
ไม่มีการประชุมอาจจะง่ายไดเรกทอรี

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

ชื่อ dir

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

เส้นทางแบบเต็ม / สัมบูรณ์


8
กำลังจะปิดหัวข้อ แต่ระวังการจัดเก็บส่วนขยายแยกต่างหากกับจุด คุณต้องจัดการชื่อไฟล์ของ "foo", "foo" และ "foo.txt" (และแม้แต่ "foo.txt.bak")
Oddthinking

1
สวัสดีพวกตัวอย่างที่ดี มันจะง่ายต่อการอ่านถ้าคุณใส่คำตอบถัดจากคำถามแทนที่จะใช้การอ้างอิงที่บังคับให้เลื่อนขึ้น ฉันทำการแก้ไขตามวิธีการเพื่อปรับปรุงให้ดีขึ้น Grettings
วิกเตอร์

3
วิคเตอร์ตั้งแต่การแก้ไขของคุณได้รับการปฏิเสธ (WTF พวกนี้คือการปรับปรุงที่ดีมาก!) ผมก็ไม่ได้มันเอง :-)
blinry

1
สำหรับ1.(ชื่อไฟล์ที่ไม่มีนามสกุล) ฉันตัดสินใจที่จะไปFile Titleนานแล้วเนื่องจากการขาดการประชุมที่ชัดเจนหรืออย่างน้อยฉันทามติระดับโลก
polyvertex

1
สำหรับA(ชื่อไฟล์โดยไม่มีนามสกุล), stemคุณสามารถใช้ การอ้างอิง: 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 / …
wisbucky

36

เป็นคำถามที่ดีก่อนอื่น +1 ของฉัน สิ่งนี้ bugged ฉันเมื่อฉันต้องสร้างฟังก์ชั่นการฆ่าในคลาสยูทิลิตี้ครั้งเดียว getFileName? หรือ GetFullName GetApplicationPath หมายถึงเส้นทางแบบเต็มหรือชื่อไดเรกทอรี? และอื่น ๆ ฉันมาจากพื้นหลัง. NET ดังนั้นฉันคิดว่าฉันสามารถเพิ่มคำตอบที่ยอดเยี่ยมได้อีกโดย @blinry

สรุป: (ในตัวเอียงคือสิ่งที่ฉันจะไม่ใช้เป็นโปรแกรมเมอร์)

  1. Path : Path ระบุตำแหน่งที่ไม่ซ้ำในระบบไฟล์ (ยกเว้นเส้นทางที่เกี่ยวข้อง) ชื่อพา ธ มีการใช้งานน้อยกว่า แต่ฉันจะติดกับเส้นทาง - มันค่อนข้างอธิบายว่ามันคืออะไร เส้นทางสามารถชี้ไปที่ไฟล์หรือโฟลเดอร์หรือแม้แต่ไม่มีอะไร (C: \) เส้นทางสามารถ:

    1. เส้นทางสัมพันธ์ : เป็นเส้นทางสัมพันธ์เช่นเดียวกับMy Source\Widget\ Widget\foo.srcอธิบายตนเอง
    2. เส้นทางแบบสัมบูรณ์หรือเส้นทางแบบเต็ม : เป็นเส้นทางแบบเต็มที่ชี้ไปยังเป้าหมาย ฉันมักจะใช้หลังบ่อยขึ้น C:\users\OddThinking\Documents\My Source\Widget\foo.srcจึงเป็นเส้นทางที่เต็มไปด้วย ดูตอนท้ายสิ่งที่ฉันเรียกเส้นทางแบบเต็มที่ชี้ไปที่ไฟล์และที่สิ้นสุดเป็นไดเรกทอรี

    หน้าวิกิพีเดียและ .NET ตั้งชื่อสำหรับเส้นทางที่มีความสอดคล้อง

  2. รูทพา ธหรือไดเรกทอรีราก : อดีตคือการประชุม. NET ในขณะที่ภายหลังจะได้ยินเสียงมากกว่าในแวดวง UNIX แม้ว่าฉันจะชอบทั้งคู่ แต่ฉันก็มักจะใช้อดีตมากกว่า ใน windows ซึ่งแตกต่างจาก UNIX จะมีรูทพา ธ ต่างกันหนึ่งอันสำหรับแต่ละพาร์ติชั่น ระบบ Unix มีหนึ่งไดเรกทอรีรากที่เก็บข้อมูลในไดเรกทอรีและไฟล์อื่น ๆ เช่น. C:\เป็นเส้นทางราก

  3. โฟลเดอร์หรือชื่อโฟลเดอร์ : Widget, OddThinkingฯลฯ ในกรณีของคุณ นี่อาจเป็นแบบแผนของ Windows เท่านั้น (อันที่จริงแล้วมันเป็นความคิดที่แปลกประหลาดของฉันเอง :)) อย่างไรก็ตามฉันขอคัดค้านคำว่า "Directory" ของ blinry แม้ว่าไดเรกทอรีผู้ใช้ปกติจะมีความหมายเหมือนกับโฟลเดอร์ (เช่นโฟลเดอร์ย่อยไดเรกทอรีย่อย) แต่ฉันเชื่อว่าจาก "มุมมองทางเทคนิค" ไดเรกทอรีทางเทคนิคควรฟังดูเหมือนที่อยู่ที่เหมาะสมกับเป้าหมายไม่ใช่เป้าหมาย เพิ่มเติมด้านล่าง

    1. โฟลเดอร์ย่อย : ด้วยความเคารพusers OddThinkingและDocumentsเป็นโฟลเดอร์ย่อย
    2. ไดเรกทอรีย่อย : ด้วยความเคารพusers OddThinking\, OddThinking\Documents\และOddThinking\Documents\My Source\Widget\ไดเรกทอรีย่อย แต่บ่อยครั้งที่เราไม่จำเป็นต้องกังวลกับมันใช่ไหม?
    3. โฟลเดอร์ย่อย : ด้วยความเคารพusers OddThinkingเป็นโฟลเดอร์ย่อย (รวมถึงโฟลเดอร์ย่อย)
    4. พาเรนต์โฟลเดอร์ : สำหรับOddThinking usersเป็นโฟลเดอร์หลัก (เพียงเอ่ยถึงคำศัพท์ต่าง ๆ ไม่ใช่เรื่องใหญ่)
  4. ไดเรกทอรีหรือไดเรกทอรีชื่อ : อดีตใช้ทั่วไปในชีวิตจริงหลังจะอยู่ในรหัส นี้หมายถึงเส้นทางครบถ้วน (หรือเพียงแค่เส้นทางแบบเต็ม ) จนถึงเป้าหมายโฟลเดอร์หลัก ในกรณีของคุณC:\users\OddThinking\Documents\My Source\Widget(ใช่ไดเรกทอรีไม่เคยหมายถึงการชี้ไปที่ไฟล์) ฉันใช้ชื่อไดเรกทอรีในรหัสของฉันเนื่องจากไดเรกทอรีเป็นคลาสใน. NET และชื่อไดเรกทอรีเป็นสิ่งที่ห้องสมุดเองเรียกมัน มันค่อนข้างสอดคล้องกับdirname ที่ใช้ในระบบ UNIX

  5. ชื่อแฟ้มหรือbasename : ชื่อของไฟล์พร้อมกับส่วนขยาย foo.srcในกรณีของคุณ: ฉันจะบอกว่าสำหรับการใช้งานทางเทคนิคที่ไม่ใช่ฉันชอบชื่อไฟล์ (มันเป็นสิ่งที่มันหมายสำหรับผู้ใช้ปลายทาง) แต่สำหรับวัตถุประสงค์ทางเทคนิคผมจะติดอย่างเคร่งครัดbasename ชื่อไฟล์มักจะใช้โดย MS, แต่ผมแปลกใจว่าพวกเขาจะไม่สอดคล้องไม่เพียง แต่ในเอกสาร แต่แม้ในห้องสมุด ชื่อไฟล์อาจหมายถึงชื่อไฟล์พื้นฐานหรือพา ธ เต็มของไฟล์ ดังนั้นฉันจึงชอบ basename นั่นคือสิ่งที่ฉันเรียกพวกเขาในรหัส หน้านี้บน wiki ก็บอกว่าชื่อไฟล์อาจหมายถึงเส้นทางแบบเต็มหรือชื่อฐาน น่าแปลกที่แม้ใน. NET ฉันสามารถค้นหาชื่อการใช้งานเพื่อหมายถึงชื่อรูทของไฟล์

  6. นามสกุลหรือนามสกุลไฟล์หรือนามสกุลไฟล์ : ฉันชอบนามสกุลล่าสุด ทั้งหมดอ้างถึงสิ่งเดียวกัน แต่สิ่งที่เป็นเรื่องของการอภิปรายอีกครั้ง! วิกิพีเดียบอกว่ามันเป็นในขณะที่กลับมาแล้วผมจำได้ว่าอ่านว่าหลายภาษาตีความว่าเป็นsrc .srcสังเกตจุด ดังนั้นอีกครั้งใช้เวลาของฉันคือสำหรับการใช้งานแบบสบาย ๆ มันไม่สำคัญว่ามันคืออะไร .srcแต่เป็นโปรแกรมเมอร์ผมมักจะเห็นเป็นส่วนขยาย

    โอเคฉันอาจลองเรียกใช้มาตรฐานทั่วไปบ้าง แต่นี่เป็นอนุสัญญาสองข้อที่ฉันติดตาม และมันเกี่ยวกับเส้นทางที่เต็ม

    1. ฉันมักเรียกเส้นทางที่เต็มรูปแบบที่ชี้ไปที่ไฟล์เป็นเส้นทางของแฟ้ม สำหรับฉันเส้นทางของไฟล์นั้นชัดเจนมันบอกฉันว่ามันคืออะไร แม้ว่าจะมีชื่อไฟล์ฉันคิดว่ามันเป็นชื่อของไฟล์ในรหัสของฉันฉันเรียกว่าชื่อไฟล์ นอกจากนี้ยังสอดคล้องกับ " ชื่อไดเรกทอรี " จากด้านเทคนิคชื่อหมายถึงชื่อที่มีคุณสมบัติครบถ้วน! . Frustratingly .NET ใช้ชื่อไฟล์คำ (ดังนั้นฉันมีกรณีของฉันที่นี่) และบางครั้งเส้นทางไฟล์สำหรับเรื่องนี้

    2. ฉันเรียกเส้นทางเต็มที่ลงท้ายด้วยไดเรกทอรีไดเรกทอรี ในความเป็นจริงเราสามารถเรียกส่วนใด ๆ ของที่อยู่ที่ไม่ได้ชี้ไปที่ไฟล์ไดเรกทอรี ดังนั้นC:\users\OddThinking\Documents\My Source\เป็นไดเรกทอรีC:\users\OddThinking\เป็นไดเรกทอรีหรือแม้กระทั่งOddThinking\Documents\My Source\(ดีกว่าที่จะเรียกมันว่าไดเรกทอรีย่อยหรือเส้นทางญาติที่ดียิ่งขึ้น - ทั้งหมดที่ขึ้นอยู่กับบริบทที่คุณกำลังจัดการกับมัน) ข้างบนฉันพูดถึงสิ่งที่แตกต่างเกี่ยวกับไดเรกทอรีซึ่งเป็นชื่อไดเรกทอรี นี่คือสิ่งที่ฉันทำได้: ฉันจะได้รับเส้นทางใหม่เพื่อหลีกเลี่ยงความสับสน นี่อะไรน่ะD:\Fruit\Apple\Pip\? ไดเรกทอรี แต่ถ้าคำถามคือสิ่งที่เป็นไดเรกทอรีหรือชื่อไดเรกทอรีที่ดียิ่งขึ้นของคำตอบคือD:\Fruit\Apple\Pip\ D:\Fruit\Apple\หวังว่ามันชัดเจน

    ฉันจะบอกว่าดีกว่าที่จะไม่กังวลเกี่ยวกับคำสองคำสุดท้ายเนื่องจากเป็นสิ่งที่สร้างความสับสนมากที่สุด (สำหรับฉันเป็นการส่วนตัว) เพียงใช้คำเต็มเส้นทาง !

เพื่อตอบคุณ:

  1. เกี่ยวกับเส้นทางที่คุณให้

    A) ไม่มีความคิด อย่างไรก็ตามฉันไม่จำเป็นต้องไปคนเดียว

    B) ชื่อฐาน

    C) ฉันจะเรียกมันว่านามสกุลไฟล์ในขณะนี้ฉันกังวลน้อยที่สุดเพราะฉันไม่เคยต้องการให้ชื่อนั้นอยู่ในรหัสของฉันเพียงอย่างเดียว

    D) นามสกุลไฟล์อย่างแน่นอน

    E) ฉันไม่คิดว่านี่เป็นข้อกำหนดทั่วไป ไม่มีความเห็น. ใน. NET ไดเรกทอรีพื้นฐานจะเหมือนกับชื่อไดเรกทอรี

    F) เส้นทางญาติ

    G) โฟลเดอร์ (โฟลเดอร์หลักที่จะใช้เป็นชื่อฐานfoo.src)

    H) ชื่อไดเรกทอรี

    I) เส้นทางแบบเต็ม (หรือแม้แต่ชื่อไฟล์)

  2. โดยทั่วไป (ขออภัยที่เป็น verbose เพียงเพื่อขับรถกลับบ้านจุด) แต่สมมติว่าfoo.srcเป็นไฟล์แน่นอน

    A) NA

    B) ชื่อฐาน

    C) นา

    D) ส่วนขยาย

    E) ไดเรกทอรีหรือเส้นทาง

    F) เส้นทางญาติ

    ช) นา

    ไดเรกทอรี H) หรือเพียงเส้นทาง

    I) เส้นทางแบบเต็ม (หรือแม้แต่ชื่อไฟล์)

การขับขี่ต่อไปด้วยตัวอย่างจากด้านข้างของฉัน:

  1. C:\Documents and Settings\All Users\Application Data\s.sqlพิจารณาเส้นทาง

    1. C:\Documents and Settings\All Users\Application Data\s.sql เป็นเส้นทางแบบเต็ม (ซึ่งเป็นชื่อไฟล์)
    2. C:\Documents and Settings\All Users\Application Data\ เป็นชื่อไดเรกทอรี
  2. พิจารณาเส้นทาง C:\Documents and Settings\All Users\Application Data

    1. C:\Documents and Settings\All Users\Application Data เป็นเส้นทางแบบเต็ม (ซึ่งเกิดขึ้นเป็นไดเรกทอรี)
    2. C:\Documents and Settings\All Users เป็นชื่อไดเรกทอรี

สองเคล็ดลับของฉัน:

  1. ฉันทำตามกฎง่ายๆนี้ว่าเมื่อพูดถึงที่อยู่แบบเต็มโดยไม่คำนึงถึงประเภทของมันฉันมักจะเรียกมันว่า "เส้นทางเต็ม" สิ่งนี้ไม่เพียง แต่กำจัดการใช้คำศัพท์สองคำสำหรับเส้นทางไฟล์และเส้นทางโฟลเดอร์ แต่ยังช่วยลดความสับสนที่อาจเกิดขึ้นหากคุณจะตั้งชื่อไฟล์ว่าเป็นชื่อไฟล์ (ซึ่งสำหรับผู้ใช้ส่วนใหญ่แปลเป็นชื่อไฟล์ทันที) แต่ใช่ถ้าคุณต้องเจาะจงเกี่ยวกับประเภทของเส้นทางมันจะดีกว่าถ้าจะตั้งชื่อชื่อไฟล์หรือไดเรกทอรีแทนที่จะเป็น "เส้นทาง" ทั่วไป

  2. ไม่ว่าคุณจะมีความคิดในใจของตัวเองอย่างไรให้สอดคล้องกับมันตลอด มีฉันทามติในหมู่สมาชิกในทีมว่านี่หมายถึงนี้และไม่ว่า

ตอนนี้จากวงกลมฉันมีการฝึกฝนบ้าง ข้อกำหนดใหม่ของแบรนด์จะเป็นสิ่งที่ใช้กับเครื่อง OS X และ Android และสิ่งเหล่านี้เป็นเพียงเส้นทางที่มีอยู่จริงในระบบแฟ้ม คำศัพท์ชุดใหม่ทั้งหมดจะเกิดขึ้นในกรณีที่อยู่เว็บ ฉันคาดหวังว่าจะมีคนเติมช่องว่างในหัวข้อเดียวกันนี้ :) ฉันยินดีที่จะรับฟังการประชุมที่คุณได้ดำเนินการไป ..


เป็นเวลานานที่ฉันได้ใช้คำว่า "ชื่อพา ธ " เพื่อหมายถึงเส้นทางทั้งหมดทั้งหมดรวมถึงชื่อไฟล์แบบเต็ม คำตอบของคุณคนอื่น ๆ ที่นี่และทรัพยากรอื่น ๆ ได้เปลี่ยนความคิดของฉันเกี่ยวกับสิ่งนั้นและตอนนี้ฉันจะใช้คำว่า "fullpath" สำหรับสิ่งนี้ "เส้นทาง" สำหรับตำแหน่งโดยไม่มีชื่อไฟล์และ "ชื่อไฟล์" หรือ "ชื่อ" สำหรับชื่อไฟล์ ตัวเอง
เนท

24

ใน C ++, Boost.Filesystemได้ออกแบบระบบการตั้งชื่อสำหรับส่วนต่าง ๆ ของเส้นทาง ดูเอกสารอ้างอิงการสลายตัวของเส้นทางสำหรับรายละเอียดเช่นเดียวกับการสอนนี้

นี่คือบทสรุปตามบทช่วยสอน สำหรับ:

  • เส้นทาง Windows: c:\foo\bar\baa.txt
  • เส้นทาง Unix: /foo/bar/baa.txt

คุณได้รับ:

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 ++ มาตรฐาน ISO / IEC 14882: 2017

นอกจากนี้คำศัพท์ Boost.Filesystem ถูกนำมาใช้โดย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
พวกเขาจะเรียกสิ่งใดทั้งนั้น path, fullpath?
wisbucky

@wiscucky สิ่งทั้งหมดเรียกว่า "เส้นทาง" ในระบบการตั้งชื่อของพวกเขา
Emile Cormier

1
@wiscucky แก้ไขการเชื่อมโยง ขอบคุณ
Emile Cormier

@olibre: ขอบคุณสำหรับการอัปเดต C ++ 17 แต่stem()เป็นส่วนหนึ่งของชื่อไฟล์ไม่เส้นทาง
เอมิไมเออร์

1
@ johnc.j มันเลวร้ายเกินไป Boost.Files ระบบไม่เป็นที่รู้จักกันดีเมื่อคำถามถูกถามครั้งแรก ฉันควรจะใช้ระบบการตั้งชื่อของห้องสมุดที่ผ่านการตรวจสอบโดยเพื่อนมากกว่าที่จะทำอะไรด้วยตัวเอง
Emile Cormier

9

ไลบรารี่pathlibมาตรฐานของ Python มีรูปแบบการตั้งชื่อที่ยอดเยี่ยมสำหรับส่วนประกอบของพา ธ : https://docs.python.org/3/library/pathlib.html

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

ต้นกำเนิด

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

ชื่อ

c) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo src (ไม่มีจุด)

[อะไร]

d) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src (มีจุด)

วิภัตติ

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

เส้นทางผู้ปกครองที่ยิ่งใหญ่

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

พา ธ ที่สัมพันธ์กับพาเรนต์พาเรนต์

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

ชื่อผู้ปกครอง

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

พา ธ ของพาเรนต์

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

เส้นทาง


8

ไม่คุณไม่ได้บ้า

ในระบบ Windows บางครั้งเส้นทางของไดเรกทอรีที่มีไฟล์เรียกว่าเส้นทางซึ่งเป็นวิธีการที่มันมาจากจุดเริ่มต้น ตัวอย่างเช่น

    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 นั้นมีเหตุผลมากกว่าและนั่นคือสิ่งที่ทุกคนกล่าวถึงข้างต้น: พา ธ รวมถึงชื่อไฟล์ด้วย อย่างไรก็ตามหากคุณพิมพ์ "call /?" ในบรรทัดคำสั่งของ Windows คุณจะได้รับสิ่งนี้:

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

ดังนั้นจึงเป็น "เส้นทางเท่านั้น" และ "ชื่อไฟล์เท่านั้น" ในเวลาเดียวกันพวกเขาอ้างถึงสตริงทั้งหมดว่า "ชื่อพา ธ แบบเต็ม" ซึ่งเข้าใจได้ว่าเป็นอักษรชื่อไดรฟ์บวกกับพา ธ และชื่อไฟล์ ดังนั้นจึงไม่มีความจริงที่แท้จริง มันไร้ประโยชน์ คุณถูกหักหลัง

อย่างไรก็ตาม,

เพื่อตอบคำถามของคุณ

นี่คือวิธีที่ฉันจะตั้งชื่อตัวอย่างของคุณ:

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

ADEF ไม่มีชื่อเล่นง่าย ๆ และเนื่องจาก php อาจเป็นภาษาข้ามแพลตฟอร์มที่รู้จักกันอย่างกว้างขวางทุกคนจึงเข้าใจ "basename" และ "dirname" ดังนั้นฉันจึงติดชื่อนั้น ชื่อเต็มยังชัดเจน เส้นทางแบบเต็มจะค่อนข้างคลุมเครือ แต่โดยส่วนใหญ่แล้วมันหมายถึงสิ่งเดียวกัน


1
เป็นเวลานานที่ฉันได้ใช้คำว่า "ชื่อพา ธ " เพื่อหมายถึงเส้นทางทั้งหมดทั้งหมดรวมถึงชื่อไฟล์แบบเต็ม คำตอบอื่น ๆ ที่นี่และทรัพยากรอื่น ๆ ได้เปลี่ยนความคิดของฉันเกี่ยวกับสิ่งนั้นและตอนนี้ฉันจะใช้คำว่า "fullpath" สำหรับสิ่งนี้ "เส้นทาง" สำหรับตำแหน่งโดยไม่มีชื่อไฟล์และ "ชื่อไฟล์" หรือ "ชื่อ" สำหรับชื่อไฟล์เอง
เนท
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.