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

ชื่อไฟล์ใช้สำหรับระบุไฟล์คอมพิวเตอร์แต่ละไฟล์ในระบบไฟล์ อย่างเฉพาะ เจาะจง ระบบไฟล์แต่ละระบบมีข้อจำกัดเกี่ยวกับความยาวของชื่อไฟล์ที่แตกต่างกัน
ชื่อไฟล์อาจประกอบด้วย (ขึ้นอยู่กับระบบไฟล์) ดังต่อไปนี้:
- ชื่อ – ชื่อพื้นฐานของไฟล์
- นามสกุลไฟล์ – อาจระบุแบบของไฟล์ (เช่น
.txtสำหรับข้อความธรรมดาสำหรับไฟล์ PDF.pdfสำหรับข้อมูลไบนารีที่ไม่ระบุรูปแบบ เป็นต้น).dat
ส่วนประกอบที่จำเป็นในการระบุไฟล์โดยโปรแกรมยูทิลิตี้และแอปพลิเคชันจะแตกต่างกันไปตามระบบปฏิบัติการ เช่นเดียวกับไวยากรณ์และรูปแบบของชื่อไฟล์ที่ถูกต้อง
อักขระที่อนุญาตในชื่อไฟล์ขึ้นอยู่กับระบบไฟล์ ระบบไฟล์ส่วนใหญ่รองรับตัวอักษร A–Z และตัวเลข 0–9 ระบบไฟล์หลายระบบรองรับอักขระเพิ่มเติม เช่น ตัวอักษร a–z อักขระพิเศษ และอักขระที่พิมพ์ได้อื่นๆ เช่น ตัวอักษรที่มีเครื่องหมายเน้นเสียง สัญลักษณ์ในอักษรที่ไม่ใช่โรมัน และสัญลักษณ์ในสคริปต์ที่ไม่ใช่ตัวอักษร ระบบไฟล์บางระบบอนุญาตให้อักขระที่พิมพ์ไม่ได้ เช่นBell , Null , ReturnและLinefeedเป็นส่วนหนึ่งของชื่อไฟล์ได้[ 1 ]แม้ว่ายูทิลิตี้ส่วนใหญ่จะไม่รองรับอักขระเหล่านี้ได้ดีก็ตาม
ชื่อไฟล์อาจประกอบด้วยสิ่งต่างๆ เช่น หมายเลขการแก้ไขหรือหมายเลขรุ่นของไฟล์ หมายเลขลำดับตัวเลข (ซึ่งใช้กันอย่างแพร่หลายในกล้องดิจิทัลผ่านมาตรฐานDCF ) วันที่และเวลา (ซึ่งใช้กันอย่างแพร่หลายใน ซอฟต์แวร์ กล้องสมาร์ทโฟนและสำหรับการจับภาพหน้าจอ ) หรือข้อความแสดงความคิดเห็น เช่น ชื่อของหัวเรื่องหรือสถานที่ หรือข้อความอื่นๆ เพื่อช่วยระบุไฟล์
บางคนใช้คำว่า "ชื่อไฟล์" เมื่ออ้างถึงรายละเอียดที่สมบูรณ์ของอุปกรณ์ โฟลเดอร์ย่อย และชื่อไฟล์ เช่น Windows C:\Program Files\Microsoft Games\Chess\Chess.exeในกรณีนี้ ชื่อไฟล์คือChess.exeบางโปรแกรมมีฟังก์ชันให้ซ่อนนามสกุลไฟล์ เช่นเดียวกับ MS Windows Explorer
ประวัติศาสตร์
ในช่วงทศวรรษ 1970 คอมพิวเตอร์เมนเฟรมและมินิคอมพิวเตอร์ บางรุ่น มีระบบปฏิบัติการที่ระบุไฟล์ในระบบด้วยชื่อผู้ใช้หรือหมายเลขบัญชี
ตัวอย่างเช่น ใน ระบบปฏิบัติการ TOPS-10และRSTS/EจากDigital Equipment Corporationไฟล์ต่างๆ จะถูกระบุโดย
- ชื่ออุปกรณ์ (หนึ่งหรือสองตัวอักษร) ตามด้วยหมายเลขหน่วย (ไม่บังคับ) และเครื่องหมายโคลอน ":" หากไม่มี จะถือว่าเป็น SY:
- หมายเลขบัญชี ซึ่งประกอบด้วยวงเล็บเหลี่ยม "[", ตัวเลขสองตัวคั่นด้วยเครื่องหมายจุลภาค และตามด้วยวงเล็บเหลี่ยมปิด "]" หากละเว้น จะถือว่าเป็นหมายเลขของคุณ
- ชื่อไฟล์ต้องระบุ โดยต้องมีอักขระ 1 ถึง 6 ตัว (ตัวพิมพ์ใหญ่หรือตัวเลข)
- ส่วนขยายเพิ่มเติม 3 ตัวอักษร (ไม่บังคับ)
บน ระบบปฏิบัติการ OS/360 และระบบปฏิบัติการรุ่นต่อมาของIBMชื่อไฟล์สามารถมีความยาวได้สูงสุด 44 ตัวอักษร ประกอบด้วยตัวอักษรพิมพ์ใหญ่ ตัวเลข และจุด ชื่อไฟล์ต้องขึ้นต้นด้วยตัวอักษรหรือตัวเลข ต้องมีจุดอย่างน้อยหนึ่งครั้งทุกๆ 8 ตัวอักษร ห้ามมีจุดสองจุดติดกันในชื่อไฟล์ และชื่อไฟล์ต้องลงท้ายด้วยตัวอักษรหรือตัวเลข[ 2 ] [ 3 ]ตามธรรมเนียม เมื่อใช้TSOตัวอักษรและตัวเลขก่อนจุดแรกจะเป็นหมายเลขบัญชีของเจ้าของหรือโครงการที่เกี่ยวข้อง แต่ไม่มีข้อกำหนดให้ใช้ธรรมเนียมนี้[ 4 ]
ใน ระบบ MUSIC/SP ของมหาวิทยาลัย McGill ชื่อไฟล์ประกอบด้วย
- หมายเลขบัญชี (ไม่บังคับ) ซึ่งประกอบด้วยอักขระหนึ่งถึงสี่ตัวตามด้วยเครื่องหมายโคลอน หากไม่มีหมายเลขบัญชี จะถือว่าอยู่ในบัญชีของคุณ แต่หากมี จะถือว่าอยู่ในบัญชีเสมือน *COM: ซึ่งเป็นที่จัดเก็บไฟล์ทั้งหมดที่ถูกทำเครื่องหมายว่าเป็นสาธารณะ
- ชื่อไฟล์ต้องมีความยาว 1-17 ตัวอักษร ซึ่งอาจเป็นตัวอักษรพิมพ์ใหญ่หรือตัวเลข และจุด โดยมีข้อกำหนดว่าชื่อไฟล์ต้องไม่ขึ้นต้นหรือลงท้ายด้วยจุด หรือมีจุดติดกันสองจุด
ระบบปฏิบัติการ Univac VS/9มีชื่อไฟล์ประกอบด้วย
- ชื่อบัญชี ประกอบด้วยเครื่องหมายดอลลาร์ "$" ชื่อผู้ใช้ 1-7 ตัวอักษร (ตัวอักษรหรือตัวเลข) และจุด (".") หากไม่มีการระบุ จะถือว่าไฟล์นั้นอยู่ในบัญชีของคุณ แต่หากไม่อยู่ในบัญชีของคุณ ระบบปฏิบัติการจะค้นหาในบัญชีของผู้จัดการระบบ $TSOS หากคุณพิมพ์เฉพาะเครื่องหมายดอลลาร์เป็นชื่อบัญชี จะแสดงว่าไฟล์นั้นอยู่ในบัญชี $TSOS เว้นแต่ว่าอักขระ 1-7 ตัวแรกของชื่อไฟล์ก่อนจุดแรกตรงกับชื่อบัญชีจริง ในกรณีนั้นจะใช้บัญชีนั้น เช่น ABLE.BAKER เป็นไฟล์ในบัญชีของคุณ แต่หากไม่อยู่ในบัญชีนั้น ระบบจะค้นหา $TSOS.ABLE.BAKER แต่หากระบุ $ABLE.BAKER ระบบจะใช้ไฟล์ $TSOS.ABLE.BAKER เว้นแต่ว่า $ABLE เป็นบัญชีที่ถูกต้อง ในกรณีนั้นระบบจะค้นหาไฟล์ชื่อ BAKER ในบัญชีนั้น
- ชื่อไฟล์ ต้องมีความยาว 1–56 ตัวอักษร (ตัวอักษรและตัวเลข) คั่นด้วยจุด ชื่อไฟล์ต้องไม่ขึ้นต้นหรือลงท้ายด้วยจุด และต้องไม่มีจุดสองจุดติดกัน
ในปี พ.ศ. 2528 RFC 959ได้กำหนดอย่างเป็นทางการว่าpathnameคือสตริงอักขระที่ผู้ใช้ต้องป้อนลงในระบบไฟล์เพื่อระบุไฟล์[ 5 ]
ในคอมพิวเตอร์ส่วนบุคคลรุ่น แรกๆ ที่ใช้ ระบบปฏิบัติการ CP/Mชื่อไฟล์จะมีอักขระ 11 ตัวเสมอ ซึ่งเรียกว่าชื่อไฟล์ 8.3โดยมีชื่อสูงสุด 8 ไบต์ และส่วนขยายสูงสุด 3 ไบต์ ยูทิลิตี้และแอปพลิเคชันอนุญาตให้ผู้ใช้ระบุชื่อไฟล์โดยไม่มีช่องว่างต่อท้าย และใส่จุดก่อนส่วนขยาย จุดนั้นไม่ได้ถูกเก็บไว้ในไดเร็กทอรีจริงๆ การใช้อักขระ 7 บิตเท่านั้นทำให้สามารถ รวม คุณลักษณะของไฟล์ หลายอย่าง ไว้ในชื่อไฟล์ได้โดยใช้บิตลำดับสูง คุณลักษณะเหล่านี้ได้แก่ อ่านอย่างเดียว เก็บถาวร และระบบ[ 6 ]ในที่สุดสิ่งนี้ก็เข้มงวดเกินไป และจำนวนอักขระที่อนุญาตก็เพิ่มขึ้น บิตคุณลักษณะถูกย้ายไปยังบล็อกพิเศษของไฟล์ซึ่งรวมถึงข้อมูลเพิ่มเติม
ระบบไฟล์ File Allocation Table (FAT) ดั้งเดิมซึ่งใช้โดยStandalone Disk BASIC-80มีรูปแบบชื่อไฟล์ 6.3 โดยชื่อไฟล์มีขนาดสูงสุด 6 ไบต์ และนามสกุลไฟล์มีขนาดสูงสุด 3 ไบต์ระบบไฟล์FAT12และFAT16 ใน IBM PC DOS / MS-DOSและMicrosoft Windowsก่อนWindows 95ใช้รูปแบบ 8.3 เดียวกันกับระบบไฟล์ CP/M ระบบไฟล์ FAT รองรับอักขระ 8 บิต ทำให้สามารถรองรับอักขระที่ไม่ใช่ ASCII ในชื่อไฟล์ได้ และจัดเก็บแอตทริบิวต์แยกต่างหากจากชื่อไฟล์
ประมาณปี 1995 VFATซึ่งเป็นส่วนขยายของระบบไฟล์ FAT ใน MS-DOS ได้ถูกนำมาใช้ในWindows 95และWindows NTโดยอนุญาตให้ ใช้ ชื่อไฟล์แบบยาว ที่มีทั้งตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก (LFN) โดยใช้ ตัวอักษร Unicodeนอกเหนือจากชื่อไฟล์แบบคลาสสิก "8.3"
รูปแบบการตั้งชื่อไฟล์
โปรแกรมและอุปกรณ์ต่างๆ อาจกำหนดชื่อไฟล์โดยอัตโนมัติ เช่น ชื่อตัวเลขนับ (ตัวอย่างเช่นIMG_0001.JPG) หรือชื่อเวลาพร้อมวันที่และเวลาปัจจุบัน
ข้อดีของการตั้งชื่อไฟล์ที่มีการประทับเวลาคือ ช่วยให้ค้นหาไฟล์ตามวันที่ได้ง่ายขึ้น เนื่องจากโปรแกรมจัดการไฟล์ส่วนใหญ่มักมีฟังก์ชันค้นหาไฟล์ตามชื่ออยู่แล้ว นอกจากนี้ ยังสามารถรวมไฟล์จากอุปกรณ์ต่างๆ เข้าไว้ในไดเร็กทอรีเดียวกันได้โดยไม่มีปัญหาเรื่องชื่อไฟล์ซ้ำซ้อน
ในทางกลับกัน ชื่อไฟล์ที่มีตัวเลขกำกับไม่จำเป็นต้องให้เครื่องมีนาฬิกาภายในที่ตั้งค่าอย่างถูกต้อง ตัวอย่างเช่น ผู้ใช้ กล้องดิจิทัล บางคน อาจไม่ใส่ใจที่จะตั้งค่านาฬิกาของกล้อง อุปกรณ์ที่เชื่อมต่ออินเทอร์เน็ต เช่น สมาร์ทโฟน อาจซิงโครไนซ์นาฬิกาจากเซิร์ฟเวอร์ NTP ได้
โดยทั่วไปแล้ว รูปแบบการตั้งชื่อไฟล์ที่พบได้บ่อยที่สุดคือการจำกัดชื่อไดเร็กทอรีและชื่อไฟล์ให้อยู่ภายใน 65 ตัวอักษรของชุดอักขระชื่อไฟล์แบบพกพา POSIXวิธีการที่นิยมใช้กันอย่างหนึ่งคือการจัดเก็บ "ชื่อเรื่อง" เต็มของเอกสารไว้ภายในไฟล์เองในรูปแบบอักขระ UTF-8 ใดๆ จากนั้นจึงสร้าง"สลัก"จากชื่อเรื่องนั้นโดยอัตโนมัติเพื่อใช้เป็นชื่อไฟล์
อ้างอิง: ค่าสัมบูรณ์เทียบกับค่าสัมพัทธ์
การอ้างอิงแบบสัมบูรณ์จะรวมทุกระดับของไดเร็กทอรี ในบางระบบ การอ้างอิงชื่อไฟล์ที่ไม่รวมเส้นทางไดเร็กทอรีแบบเต็มจะใช้ไดเร็กทอรีปัจจุบัน เป็นค่าเริ่มต้น นี่คือการอ้างอิงแบบสัมพัทธ์ ข้อดีอย่างหนึ่งของการใช้การอ้างอิงแบบสัมพัทธ์ในไฟล์การกำหนดค่าโปรแกรมหรือสคริปต์คือ อินสแตนซ์ต่างๆ ของสคริปต์หรือโปรแกรมสามารถใช้ไฟล์ที่แตกต่างกันได้
วิธีนี้จะสร้างเส้นทางแบบสัมบูรณ์หรือแบบสัมพัทธ์ที่ประกอบด้วยลำดับของชื่อไฟล์
จำนวนชื่อต่อไฟล์
ระบบไฟล์แบบ Unix อนุญาตให้ไฟล์มีชื่อได้มากกว่าหนึ่งชื่อ ในระบบไฟล์แบบ Unix ดั้งเดิม ชื่อเหล่านั้นจะเป็นฮาร์ดลิงก์ ไปยัง inodeของไฟล์หรือเทียบเท่า Windows รองรับฮาร์ดลิงก์บน ระบบไฟล์ NTFSและมีคำสั่งfsutilใน Windows XP และmklinkเวอร์ชันต่อมาสำหรับการสร้างฮาร์ด ลิงก์ [ 7 ] [ 8 ]ฮาร์ดลิงก์แตกต่างจากทางลัด ของ Windows, ชื่อแทนแบบคลาสสิกของ Mac OS/macOS หรือลิงก์สัญลักษณ์การแนะนำLFNsกับVFATอนุญาตให้ใช้ชื่อแทนไฟล์ได้ ตัวอย่างเช่นlongfi~1.???ด้วยอักขระสูงสุดแปดบวกสามตัว ชื่อแทนไฟล์คือ " long file name.???" เป็นวิธีที่สอดคล้องกับข้อจำกัดของเวอร์ชัน 8.3 สำหรับโปรแกรมรุ่นเก่า
คุณสมบัตินี้ถูกใช้โดยอัลกอริทึมคำสั่งย้าย ซึ่งจะสร้างชื่อไฟล์ที่สองขึ้นมาก่อน จากนั้นจึงลบชื่อไฟล์แรกออก
ระบบไฟล์อื่นๆ ถูกออกแบบมาให้กำหนดชื่อไฟล์เพียงชื่อเดียวต่อไฟล์ เพื่อรับประกันว่าการเปลี่ยนแปลงไฟล์ที่มีชื่อไฟล์หนึ่งจะไม่ส่งผลกระทบต่อไฟล์ที่มีชื่อไฟล์อื่น
ข้อจำกัดด้านความยาว
ระบบไฟล์บางระบบจำกัดความยาวของชื่อไฟล์ ในบางกรณี ความยาวเหล่านี้จะใช้กับชื่อไฟล์ทั้งหมด เช่น 44 ตัวอักษรใน IBM z/OS [ 3 ] ในกรณีอื่นๆ ข้อจำกัดความยาวอาจใช้กับส่วนใดส่วนหนึ่งของชื่อไฟล์ เช่น ชื่อไฟล์ในไดเร็กทอรี หรือชื่อไดเร็กทอรี ตัวอย่างเช่น 9 (เช่นFAT 8 บิตในStandalone Disk BASIC ), 11 (เช่นFAT12 , FAT16 , FAT32ใน DOS), 14 (เช่น Unix รุ่นแรกๆ), 21 ( Human68K ), 31, 30 (เช่นApple DOS 3.2 และ 3.3), 15 (เช่นApple ProDOS ), 44 (เช่น IBM S/370) [ 3 ]หรือ 255 (เช่น Berkeley Unix รุ่นแรกๆ) ตัวอักษรหรือไบต์ ข้อจำกัดด้านความยาวมักเกิดจากการจัดสรรพื้นที่คงที่ในระบบไฟล์เพื่อจัดเก็บส่วนประกอบของชื่อ ดังนั้นการเพิ่มขีดจำกัดจึงมักต้องมีการเปลี่ยนแปลงที่ไม่เข้ากัน รวมถึงการจองพื้นที่เพิ่มเติมด้วย
ปัญหาเฉพาะอย่างหนึ่งของระบบไฟล์ที่จัดเก็บข้อมูลในไดเร็กทอรีแบบซ้อนกันคือ อาจสามารถสร้างไฟล์ที่มีพาธชื่อที่สมบูรณ์ซึ่งเกินขีดจำกัดการใช้งานได้ เนื่องจากการตรวจสอบความยาวอาจใช้กับส่วนต่างๆ ของชื่อเท่านั้น ไม่ใช่ชื่อทั้งหมด แอปพลิเคชัน Windows หลายตัวถูกจำกัดไว้ที่MAX_PATHค่า 260 แต่ชื่อไฟล์ของ Windows สามารถเกินขีดจำกัดนี้ได้ง่าย[ 9 ]ตั้งแต่Windows 10 เวอร์ชัน 1607ข้อจำกัด MAX_PATH ได้ถูกลบออกแล้ว[ 10 ]
นามสกุลไฟล์
ชื่อไฟล์ในระบบไฟล์บางระบบ เช่นFATและ ODS-1 และ ODS-2 ของFiles-11ประกอบด้วยสองส่วน คือชื่อหลักหรือลำต้นและส่วนขยายหรือคำต่อท้ายที่บางแอปพลิเคชันใช้เพื่อระบุประเภทไฟล์ระบบไฟล์อื่นๆ เช่น ระบบไฟล์ Unix , VFATและNTFSจะถือว่าชื่อไฟล์เป็นสตริงเดียว โดยทั่วไปแล้ว ระบบไฟล์เหล่านั้นมักจะถือว่าอักขระที่อยู่หลังจุดสุดท้ายในชื่อไฟล์ (ในกรณีที่ชื่อไฟล์มีจุด) เป็นส่วนขยายของชื่อไฟล์
ไฟล์เอาต์พุตหลายไฟล์ที่สร้างโดยแอปพลิเคชันอาจใช้ชื่อไฟล์พื้นฐานเดียวกัน แต่มีนามสกุลไฟล์ที่แตกต่างกัน ตัวอย่างเช่น คอมไพเลอร์ Fortran อาจใช้นามสกุล `.` FORสำหรับไฟล์อินพุตที่เป็นซอร์สโค้ด สำหรับไฟล์OBJเอาต์พุตที่เป็นออบเจ็กต์ และLSTสำหรับไฟล์แสดงรายการ แม้ว่าจะมีนามสกุลไฟล์ทั่วไปอยู่บ้าง แต่ก็เป็นเพียงการกำหนดขึ้นเอง และแอปพลิเคชันอื่นอาจใช้ ` .` RELและRPT`.` นามสกุลไฟล์ถูกจำกัดความยาวไว้ที่ 3 ตัวอักษร อย่างน้อยก็ในอดีตบนบางระบบ แต่โดยทั่วไปแล้วสามารถมีความยาวเท่าใดก็ได้ เช่น ` html.`
ความสามารถในการทำงานร่วมกันของการเข้ารหัส
ไม่มีมาตรฐานการเข้ารหัสทั่วไปสำหรับชื่อไฟล์
การแลกเปลี่ยนชื่อไฟล์ระหว่างสภาพแวดล้อมซอฟต์แวร์เป็นสิ่งจำเป็นสำหรับการถ่ายโอนไฟล์ผ่านเครือข่าย การจัดเก็บในระบบไฟล์ ซอฟต์แวร์สำรองข้อมูลและซิงโครไนซ์ไฟล์ การจัดการการกำหนดค่า การบีบอัดข้อมูล และการเก็บถาวร เป็นต้น ดังนั้น การรักษาข้อมูลชื่อไฟล์ไม่ให้สูญหายระหว่างแอปพลิเคชันจึงมีความสำคัญอย่างยิ่ง นี่จึงนำไปสู่การนำ Unicode มาใช้เป็นมาตรฐานในการเข้ารหัสชื่อไฟล์อย่างแพร่หลาย แม้ว่าซอฟต์แวร์รุ่นเก่าอาจจะไม่รองรับ Unicode ก็ตาม
ความสามารถในการทำงานร่วมกันของตัวบ่งชี้การเข้ารหัส
ตามธรรมเนียมแล้ว ชื่อไฟล์อนุญาตให้ใช้อักขระใดก็ได้ในชื่อไฟล์ ตราบใดที่อักขระนั้นปลอดภัยต่อระบบไฟล์[ 11 ]แม้ว่าวิธีนี้จะอนุญาตให้ใช้การเข้ารหัสใดก็ได้ และด้วยเหตุนี้จึงอนุญาตให้แสดงข้อความท้องถิ่นใดก็ได้บนระบบท้องถิ่นใดก็ได้ แต่ก็ทำให้เกิดปัญหาการทำงานร่วมกันหลายประการ
ชื่อไฟล์อาจถูกจัดเก็บโดยใช้สตริงไบต์ที่แตกต่างกันในระบบที่แตกต่างกันภายในประเทศเดียวกัน เช่น หากระบบหนึ่งใช้ การเข้ารหัส แบบ Shift JIS ของญี่ปุ่น และอีกระบบหนึ่ง ใช้การเข้ารหัส แบบ EUC ของญี่ปุ่น การแปลงไม่สามารถทำได้เนื่องจากระบบส่วนใหญ่ไม่ได้เปิดเผยคำอธิบายของการเข้ารหัสที่ใช้สำหรับชื่อไฟล์เป็นส่วนหนึ่งของข้อมูลไฟล์เพิ่มเติม ซึ่งทำให้ต้องเดาการเข้ารหัสชื่อไฟล์ที่มีค่าใช้จ่ายสูงทุกครั้งที่เข้าถึงไฟล์[ 11 ]
วิธีแก้ปัญหาอย่างหนึ่งคือการนำ Unicode มาใช้เป็นระบบเข้ารหัสสำหรับชื่อไฟล์
อย่างไรก็ตาม ในระบบปฏิบัติการ Mac OS แบบคลาสสิก การเข้ารหัสชื่อไฟล์จะถูกจัดเก็บไว้พร้อมกับคุณลักษณะของชื่อไฟล์[ 11 ]
ความสามารถในการทำงานร่วมกันของยูนิโค้ด
มาตรฐาน Unicode ช่วยแก้ปัญหาเรื่องการกำหนดรูปแบบการเข้ารหัสได้
อย่างไรก็ตาม ปัญหาการทำงานร่วมกันที่จำกัดบางประการยังคงอยู่ เช่น การทำให้เป็นมาตรฐาน (ความเท่าเทียมกัน) หรือเวอร์ชัน Unicode ที่ใช้ ตัวอย่างเช่น UDF จำกัดอยู่ที่ Unicode 2.0 ระบบไฟล์HFS+ ของ macOS ใช้การ ทำให้เป็นมาตรฐาน Unicode NFDและสามารถกำหนดให้คำนึงถึงตัวพิมพ์ใหญ่-เล็กได้ (โดยค่าเริ่มต้นจะไม่คำนึงถึงตัวพิมพ์ใหญ่-เล็ก) ความยาวสูงสุดของชื่อไฟล์ไม่เป็นมาตรฐานและอาจขึ้นอยู่กับขนาดของหน่วยรหัส แม้ว่าจะเป็นปัญหาที่ร้ายแรง แต่ในกรณีส่วนใหญ่ปัญหานี้มีขอบเขตจำกัด[ 11 ]
บน Linux หมายความว่าชื่อไฟล์ไม่เพียงพอที่จะเปิดไฟล์ได้ นอกจากนี้ยังต้องการการแสดงไบต์ที่แน่นอนของชื่อไฟล์บนอุปกรณ์จัดเก็บข้อมูลด้วย ซึ่งสามารถแก้ไขได้ที่ระดับแอปพลิเคชันด้วยการเรียกใช้การทำให้เป็นมาตรฐานที่ซับซ้อนบางอย่าง[ 12 ]
ปัญหาความเท่าเทียมกันของ Unicode เรียกว่า "การชนกันของชื่อปกติ" วิธีแก้ปัญหาคือการรับรู้การประกอบ Unicode แบบไม่ทำให้เป็นมาตรฐานที่ใช้ในชุมชนทางเทคนิคของ Subversion และ Apache [ 13 ]วิธีแก้ปัญหานี้ไม่ได้ทำให้เส้นทางในที่เก็บข้อมูลเป็นมาตรฐาน เส้นทางจะถูกทำให้เป็นมาตรฐานเฉพาะเพื่อวัตถุประสงค์ในการเปรียบเทียบเท่านั้น อย่างไรก็ตาม บางชุมชนได้จดสิทธิบัตรกลยุทธ์นี้ไว้ ห้ามมิให้ชุมชนอื่นนำไปใช้
มุมมอง
เพื่อลดปัญหาความเข้ากันได้ระหว่างระบบ ซันได้เสนอแนวคิดบางประการดังนี้:
- ใช้การเข้ารหัส Unicode แบบเดียว (เช่น UTF-8)
- ทำการแปลงรหัสแบบโปร่งใสบนชื่อไฟล์
- ไม่จัดเก็บชื่อไฟล์ที่เป็นมาตรฐาน
- ตรวจสอบความเท่าเทียมกันของชื่อไฟล์ เพื่อหลีกเลี่ยงการมีชื่อไฟล์ที่เทียบเท่ากันสองชื่อในไดเร็กทอรีเดียวกัน[ 11 ]
ข้อจำกัดเหล่านั้นทำให้เกิดความไม่สามารถเปลี่ยนไปใช้การเข้ารหัสแบบอื่นที่ไม่ใช่ UTF-8 ในอนาคตได้
การย้ายข้อมูล Unicode
ประเด็นหนึ่งที่สำคัญคือการเปลี่ยนไปใช้ Unicode ด้วยเหตุนี้ บริษัทซอฟต์แวร์หลายแห่งจึงได้พัฒนาซอฟต์แวร์สำหรับแปลงชื่อไฟล์ไปใช้การเข้ารหัส Unicode ใหม่
- ไมโครซอฟต์ได้มอบกระบวนการย้ายข้อมูลที่โปร่งใสให้กับผู้ใช้ตลอดกระบวนการด้วยเทคโนโลยี VFAT
- Apple ได้จัดเตรียม "ยูทิลิตี้ซ่อมแซมการเข้ารหัสชื่อไฟล์เวอร์ชัน 1.0" ไว้ให้[ 14 ]
- ชุมชน Linux ได้จัดเตรียม " convmv " ไว้ให้ [ 15 ]
Mac OS X 10.3ถือเป็นการนำการแยกอักขระ Unicode 3.2 มาใช้ของ Apple ซึ่งแทนที่การแยกอักขระ Unicode 2.1 ที่ใช้ก่อนหน้านี้ การเปลี่ยนแปลงนี้ทำให้เกิดปัญหาสำหรับนักพัฒนาซอฟต์แวร์ที่เขียนซอฟต์แวร์สำหรับ Mac OS X [ 16 ]
ความเป็นเอกลักษณ์
ภายในไดเร็กทอรีเดียวกัน ชื่อไฟล์ต้องไม่ซ้ำกัน เนื่องจากไวยากรณ์ของชื่อไฟล์ใช้กับไดเร็กทอรีด้วย จึงไม่สามารถสร้างไฟล์และรายการไดเร็กทอรีที่มีชื่อเดียวกันในไดเร็กทอรีเดียวกันได้ อย่างไรก็ตาม ไฟล์หลายไฟล์ในไดเร็กทอรีที่แตกต่างกันอาจมีชื่อเดียวกันได้
แนวทางความเป็นเอกลักษณ์อาจแตกต่างกันทั้งในเรื่องความไวต่อตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก และ รูปแบบการทำให้เป็นมาตรฐานของ Unicodeเช่น NFC, NFD ซึ่งหมายความว่าอาจมีการสร้างไฟล์แยกกันสองไฟล์ที่มีชื่อไฟล์ข้อความเดียวกัน แต่มีการใช้งานไบต์ของชื่อไฟล์ที่แตกต่างกัน เช่น L"\x00C0.txt" (UTF-16, NFC) (อักษรละตินตัวพิมพ์ใหญ่ A พร้อมเครื่องหมายเกรฟ) และ L"\x0041\x0300.txt" (UTF-16, NFD) (อักษรละตินตัวพิมพ์ใหญ่ A พร้อมเครื่องหมายเกรฟ) [ 17 ]
การเก็บรักษากล่องใส่จดหมาย
ระบบไฟล์บางระบบ เช่นFATก่อนการเปิดตัวVFATจะจัดเก็บชื่อไฟล์เป็นตัวพิมพ์ใหญ่โดยไม่คำนึงถึงตัวพิมพ์เล็กที่ใช้ในการสร้างไฟล์ ตัวอย่างเช่น ไฟล์ที่สร้างด้วยชื่อ "MyName.Txt" หรือ "myname.txt" จะถูกจัดเก็บด้วยชื่อไฟล์ "MYNAME.TXT" (VFAT รักษาตัวพิมพ์ใหญ่และตัวพิมพ์เล็กไว้) สามารถใช้ตัวพิมพ์ใหญ่และตัวพิมพ์เล็กใดก็ได้ในการอ้างอิงถึงไฟล์เดียวกัน ระบบไฟล์ประเภทนี้เรียกว่าระบบไฟล์ที่ไม่คำนึงถึงตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก ( case-insensitive ) และไม่ใช่ ระบบไฟล์ที่รักษาตัวพิมพ์ใหญ่และ ตัวพิมพ์เล็ก (case-preserving ) ระบบไฟล์บางระบบห้ามใช้ตัวพิมพ์เล็กในชื่อไฟล์โดยสิ้นเชิง
ระบบไฟล์บางระบบจัดเก็บชื่อไฟล์ในรูปแบบที่สร้างขึ้นมาแต่แรก ซึ่งเรียกว่า ระบบไฟล์แบบคงตัวพิมพ์ใหญ่- เล็ก (case-retentiveหรือcase-preserving ) ระบบไฟล์ดังกล่าวอาจเป็นแบบ คำนึงถึงตัวพิมพ์ ใหญ่-เล็ก (case-sensitive)หรือไม่คำนึงถึงตัวพิมพ์ใหญ่-เล็ก (case-insensitive) ก็ได้ หากเป็นแบบคำนึงถึงตัวพิมพ์ใหญ่-เล็ก "MyName.Txt" และ "myname.txt" อาจหมายถึงไฟล์สองไฟล์ที่แตกต่างกันในไดเร็กทอรีเดียวกัน และแต่ละไฟล์จะต้องถูกอ้างอิงโดยใช้ตัวพิมพ์ใหญ่-เล็กที่ถูกต้องตามชื่อไฟล์ ในทางกลับกัน ในระบบไฟล์แบบคงตัวพิมพ์ใหญ่-เล็กที่ไม่คำนึงถึงตัวพิมพ์ใหญ่-เล็ก จะมีเพียงชื่อเดียวใน "MyName.Txt", "myname.txt" และ "Myname.TXT" เท่านั้นที่สามารถเป็นชื่อไฟล์ในไดเร็กทอรีที่กำหนดได้ในเวลาใดเวลาหนึ่ง และไฟล์ที่มีชื่อใดชื่อหนึ่งในนี้สามารถอ้างอิงได้โดยใช้ตัวพิมพ์ใหญ่-เล็กใดก็ได้
ตั้งแต่เริ่มแรก ระบบไฟล์บน Unix และระบบที่พัฒนาต่อยอดจาก Unix นั้นคำนึงถึงตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก และรักษาตัวพิมพ์ใหญ่และตัวพิมพ์เล็กไว้ อย่างไรก็ตาม ระบบไฟล์บนระบบเหล่านั้นไม่ได้คำนึงถึงตัวพิมพ์ใหญ่และตัวพิมพ์เล็กเสมอไป โดยค่าเริ่มต้นHFS+และAPFSในmacOSจะไม่คำนึงถึงตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก แต่จะรักษาตัวพิมพ์ใหญ่และตัวพิมพ์เล็กไว้ และ เซิร์ฟเวอร์ SMBมักจะแสดงพฤติกรรมที่ไม่คำนึงถึงตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก (แม้ว่าระบบไฟล์พื้นฐานจะคำนึงถึงตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก เช่นSambaบนระบบที่คล้าย Unix ส่วนใหญ่) และระบบไฟล์ไคลเอ็นต์ SMB ก็แสดงพฤติกรรมที่ไม่คำนึงถึง ตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก การคำนึงถึง ตัวพิมพ์ใหญ่และตัวพิมพ์เล็กของระบบไฟล์ เป็นความท้าทายอย่างมากสำหรับซอฟต์แวร์เช่น Samba และWineซึ่งต้องทำงานร่วมกันได้อย่างมีประสิทธิภาพกับทั้งระบบที่ถือว่าไฟล์ตัวพิมพ์ใหญ่และตัวพิมพ์เล็กแตกต่างกัน และกับระบบที่ถือว่าไฟล์ตัวพิมพ์ใหญ่และตัวพิมพ์เล็กเหมือนกัน[ 18 ]
อักขระและคำที่สงวนไว้
ระบบไฟล์ไม่ได้ใช้ชุดอักขระเดียวกันเสมอไปสำหรับการสร้างชื่อไฟล์ ก่อนที่Unicodeจะกลายเป็นมาตรฐานที่ใช้กันอย่างแพร่หลาย ระบบไฟล์ส่วนใหญ่ใช้ชุดอักขระที่ขึ้นอยู่กับภาษาท้องถิ่น ในทางตรงกันข้าม ระบบใหม่บางระบบอนุญาตให้ชื่อไฟล์ประกอบด้วยอักขระเกือบทุกตัวในชุดอักขระ Unicode และแม้แต่ลำดับไบต์ที่ไม่ใช่ Unicode บางส่วน ข้อจำกัดอาจเกิดจากระบบไฟล์ ระบบปฏิบัติการ แอปพลิเคชัน หรือข้อกำหนดสำหรับการทำงานร่วมกันกับระบบอื่นๆ
โปรแกรมยูทิลิตี้ระบบไฟล์หลายตัวห้ามไม่ให้มีอักขระควบคุมปรากฏในชื่อไฟล์ ในระบบไฟล์แบบ Unix นั้นอักขระว่าง[ 19 ]และตัวคั่นเส้นทาง/เป็นสิ่งต้องห้าม
ตัวละครที่มีปัญหา
ยูทิลิตี้ระบบไฟล์และข้อกำหนดการตั้งชื่อในระบบต่างๆ ห้ามไม่ให้อักขระบางตัวปรากฏในชื่อไฟล์หรือทำให้เกิดปัญหา: [ 9 ] ยกเว้นกรณีที่ระบุไว้เป็นอย่างอื่น สัญลักษณ์ในคอลัมน์อักขระ เช่น "และ<ไม่สามารถใช้ในชื่อไฟล์ของ Windows ได้
| อักขระ | ชื่อ | เหตุผลในการห้าม |
|---|---|---|
/ | สแลช | ใช้เป็นตัวคั่นส่วนประกอบของชื่อพาธในระบบที่คล้าย Unix, Windows และ Amiga (ตราบใดที่ การตั้งค่า SwitCharถูกตั้งค่าเป็น/ เชลล์ DOS COMMAND.COMจะถือว่าเป็นอักขระสวิตช์ แต่ DOS และ Windows เองจะยอมรับเป็นตัวคั่นในระดับ API เสมอ) เครื่องหมายทับขนาดใหญ่⧸ ( รหัส Unicode U+29F8) ได้รับอนุญาตในชื่อไฟล์ของ Unix และ Windows |
\ | แบ็กสแลช | ใช้เป็นตัวคั่นส่วนประกอบชื่อพาธเริ่มต้นใน DOS, OS/2 และ Windows (แม้ว่าSwitCharจะถูกตั้งค่าเป็น '-' ก็ตาม อนุญาตในชื่อไฟล์ Unix ดูหมายเหตุ 1 ) เครื่องหมายทับกลับขนาดใหญ่⧹ (U+29F9) อนุญาตในชื่อไฟล์ Windows |
? | เครื่องหมายคำถาม | ใช้เป็นสัญลักษณ์แทน ตัวอักษรเดี่ยวใน Unix, Windows และAmigaOS อนุญาตให้ใช้ในชื่อไฟล์ Unix ดู หมายเหตุ 1เครื่องหมายหยุดเสียงʔ (U+0294), เครื่องหมายอินเตอร์โรแบง‽ (U+203D), เครื่องหมายคำถามกลับหัว¿ (U+00BF), เครื่องหมายคำถามคู่⁇ (U+2047) และเครื่องหมายคำถามสีดำประดับ ❓ (U+2753) อนุญาตให้ใช้ในชื่อไฟล์ทุกไฟล์ |
% | เปอร์เซ็นต์ | ใช้เป็นสัญลักษณ์แทนตัวอักษรเดี่ยวในRT-11ไม่ได้ใช้ในลักษณะพิเศษใดๆ บน Windows |
* | เครื่องหมายดอกจันหรือดาว | ใช้เป็นสัญลักษณ์แทน (wildcard) ในระบบ Unix, DOS, RT-11, VMS และ Windows ใช้สำหรับระบุลำดับของอักขระใดๆ (Unix, Windows, DOS) หรือลำดับของอักขระใดๆ ในชื่อไฟล์หรือนามสกุลไฟล์ (ดังนั้น*.*ใน DOS จึงหมายถึง "ไฟล์ทั้งหมด") อนุญาตให้ใช้ในชื่อไฟล์ Unix ดูหมายเหตุ 1ดูStar (grapheme)สำหรับอักขระคล้ายเครื่องหมายดอกจันอื่นๆ ที่อนุญาตให้ใช้ในชื่อไฟล์ |
: | ลำไส้ใหญ่ | ใช้เพื่อกำหนดจุดเชื่อมต่อ/ไดรฟ์บน Windows; ใช้เพื่อกำหนดอุปกรณ์เสมือนหรืออุปกรณ์ทางกายภาพ เช่น ไดรฟ์ บน AmigaOS, RT-11และ VMS; ใช้เป็นตัวคั่นเส้นทางในMac OS รุ่นคลาสสิกหากมีเครื่องหมายโคลอนสองตัวต่อท้ายชื่อบน VMS จะระบุชื่อโหนด DECnet (เทียบเท่ากับชื่อโฮสต์ NetBIOS [เครือข่ายของ Windows] ที่นำหน้าด้วย\\.) นอกจากนี้ เครื่องหมายโคลอนยังใช้ใน Windows เพื่อแยกสตรีมข้อมูลทางเลือกออกจากไฟล์หลัก ตัว อักษรโคลอน꞉ (U+A789) และสัญลักษณ์อัตราส่วน∶ (U+2236) สามารถใช้ได้ในชื่อไฟล์ของ Windows ใน ฟอนต์ Segoe UIที่ใช้ในWindows Explorerสัญลักษณ์ ของ เครื่องหมายโคลอนและตัวอักษรโคลอนนั้นเหมือนกัน |
| | แท่งหรือท่อ แนวตั้ง | ระบุการประมวลผลแบบไปป์ไลน์ของซอฟต์แวร์ใน Unix, DOS และ Windows; อนุญาตให้ใช้ในชื่อไฟล์ Unix ดูหมายเหตุ 1 ตัวดำเนินการทางคณิตศาสตร์หาร∣ (U+2223) อนุญาตให้ใช้ในชื่อไฟล์ Windows |
" | เครื่องหมายอัญประกาศคู่ตรง | ข้อจำกัดที่สืบทอดมาจาก DOS เครื่องหมายอัญประกาศเดี่ยว' (U+0027), ' (U+2018), และ' (U+2019) และเครื่องหมายอัญประกาศคู่แบบโค้ง เครื่องหมายอัญประกาศคู่ซ้าย“ (U+201C) และเครื่องหมายอัญประกาศคู่ขวา” (U+201D) สามารถใช้ได้ทุกที่ในชื่อไฟล์ ดูหมายเหตุ 1 |
< | น้อยกว่า | ใช้สำหรับเปลี่ยนเส้นทางการป้อนข้อมูลซึ่งอนุญาตในชื่อไฟล์ Unix ดูหมายเหตุ 1ตัวอักษรปรับระยะห่างลูกศรซ้าย˂ (U+02C2) อนุญาตในชื่อไฟล์ Windows |
> | มากกว่า | ใช้สำหรับเปลี่ยนเส้นทางการส่งออกซึ่งอนุญาตในชื่อไฟล์ Unix ดูหมายเหตุ 1ตัวอักษรปรับระยะห่าง˃ (U+02C3) อนุญาตในชื่อไฟล์ Windows |
. | จุดหรือเครื่องหมายจุด | ใน Windows ชื่อ ไดเร็กทอรีไม่สามารถลงท้ายด้วยจุดได้ แต่สามารถลงท้ายด้วยจุดตามด้วยอักขระเว้นวรรคเช่นช่องว่างที่ไม่เว้นวรรคได้ในระบบปฏิบัติการอื่นๆ อนุญาตให้ใช้จุดได้ แต่จุดสุดท้ายจะถูกตีความว่าเป็นตัวคั่นนามสกุลไฟล์ใน VMS, DOS และ Windows ในระบบปฏิบัติการอื่นๆ จุดมักจะถือเป็นส่วนหนึ่งของชื่อไฟล์ และอาจอนุญาตให้มีจุดมากกว่าหนึ่งจุดได้ ใน Unix การมีจุดนำหน้าหมายความว่าไฟล์หรือไดเร็กทอรีนั้นถูกซ่อนไว้โดยปกติ |
, | เครื่องหมายจุลภาค | อนุญาตให้ใช้ได้ แต่จะถูกตีความว่าเป็นตัวคั่นโดยโปรแกรมแปลคำสั่งบรรทัดคำสั่ง COMMAND.COM และ CMD.EXE บน DOS และ Windows |
; | อัฒภาค | อนุญาตให้ใช้ได้ แต่จะถูกตีความว่าเป็นตัวคั่นโดยตัวแปลคำสั่งบรรทัดคำสั่งBourne shell (และตัวที่เข้ากันได้) และC shell (และตัวที่เข้ากันได้) บนระบบที่คล้าย Unix รวมถึง COMMAND.COM และ CMD.EXE บน DOS และ Windows ดูหมายเหตุ 1 |
= | เครื่องหมายเท่ากับ | อนุญาตให้ใช้ได้ แต่จะถูกตีความว่าเป็นตัวคั่นโดยโปรแกรมแปลคำสั่งบรรทัดคำสั่ง COMMAND.COM และ CMD.EXE บน DOS และ Windows |
| ช่องว่าง | อนุญาต แต่ช่องว่างนี้ยังใช้เป็นตัวคั่นพารามิเตอร์ใน แอปพลิ เคชันบรรทัดคำสั่งด้วย โปรดดูหมายเหตุ 1 |
หมายเหตุ 1: แม้ว่าอักขระเหล่านี้จะสามารถใช้ได้ในชื่อไฟล์และไดเร็กทอรีของ Unix แต่เชลล์ Unix ส่วนใหญ่กำหนดให้ต้องใส่เครื่องหมายคำพูดหรือเครื่องหมาย หลีกเลี่ยงสำหรับ อักขระเฉพาะ เช่น ช่องว่าง <, >, |, \ และบางครั้ง :, (, ), &, ;, # รวมถึงอักขระตัวแทน เช่น ? และ *
five\ and\ six\<seven(ตัวอย่างของการหลีกเลี่ยง)'five and six<seven'หรือ"five and six<seven"(ตัวอย่างของการอ้างอิง)
อักขระå (U+00E5) ไม่ได้รับอนุญาตให้ใช้เป็นอักษรตัวแรกในชื่อไฟล์ในระบบ86-DOSและ MS-DOS/PC DOS เวอร์ชัน 1.x-2.x แต่สามารถใช้ได้ในเวอร์ชันที่ใหม่กว่า
ในยูทิลิตี้ของ Windows ไม่อนุญาตให้ใช้ช่องว่างและจุดเป็นอักขระสุดท้ายของชื่อไฟล์[ 20 ]อนุญาตให้ใช้จุดเป็นอักขระแรกได้ แต่แอปพลิเคชัน Windows บางตัว เช่นWindows Explorerห้ามการสร้างหรือเปลี่ยนชื่อไฟล์ดังกล่าว (แม้ว่าธรรมเนียมนี้จะถูกใช้ในระบบที่คล้าย Unix เพื่ออธิบายไฟล์และไดเร็กทอรีที่ซ่อนอยู่ก็ตาม) วิธีแก้ปัญหา ได้แก่ การเพิ่มจุดเมื่อเปลี่ยนชื่อไฟล์ (ซึ่งจะถูกลบออกโดยอัตโนมัติในภายหลัง) การใช้โปรแกรมจัดการไฟล์ ทางเลือก การสร้างไฟล์โดยใช้บรรทัดคำสั่ง หรือการบันทึกไฟล์ด้วยชื่อไฟล์ที่ต้องการจากภายในแอปพลิเคชัน[ 21 ]
ระบบไฟล์บางระบบในระบบปฏิบัติการใดระบบปฏิบัติการหนึ่ง (โดยเฉพาะระบบไฟล์ที่พัฒนาขึ้นในระบบปฏิบัติการอื่น) และแอปพลิเคชันบางตัวในระบบปฏิบัติการนั้น อาจมีข้อจำกัดและการตีความเพิ่มเติม โปรดดูการเปรียบเทียบระบบไฟล์สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับข้อจำกัดต่างๆ
ในระบบที่คล้าย Unix, DOS และ Windows ชื่อไฟล์ "." และ ".." มีความหมายพิเศษ (ไดเร็กทอรีปัจจุบันและไดเร็กทอรีแม่ตามลำดับ) Windows 95/98/MEยังใช้ชื่อเช่น "...", "...." และอื่นๆ เพื่อระบุไดเร็กทอรีปู่ย่าตายายหรือปู่ทวด[ 22 ] Windows ทุกเวอร์ชันห้ามการสร้างชื่อไฟล์ที่ประกอบด้วยจุดเพียงอย่างเดียว แม้ว่าชื่อที่ประกอบด้วยจุดสามจุด ("...") หรือมากกว่านั้นจะถูกต้องตามกฎหมายใน Unix ก็ตาม
นอกจากนี้ ในยูทิลิตี้ของ Windows และ DOS คำบางคำยังถูกสงวนไว้และไม่สามารถใช้เป็นชื่อไฟล์ได้[ 21 ]ตัวอย่างเช่นไฟล์อุปกรณ์ DOS : [ 23 ]
CON, CONIN$, CONOUT$, PRN, AUX, CLOCK$, NUL COM0, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9 [ 9 ] LPT0, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9 [ 9 ] LST (เฉพาะใน86-DOSและ DOS 1.xx) KEYBD$, SCREEN$ (เฉพาะในโหมดมัลติทาสก์ของ MS-DOS 4.0 ) $IDLE$ (ใช้ได้เฉพาะในConcurrent DOS 386 , Multiuser DOSและDR DOS 5.0ขึ้นไป) CONFIG$ (ใช้เฉพาะใน MS-DOS 7.0-8.0 เท่านั้น)
ระบบที่มีข้อจำกัดเหล่านี้ทำให้เกิดความไม่เข้ากันกับระบบไฟล์อื่นๆ บางระบบ ตัวอย่างเช่น Windows จะไม่สามารถจัดการหรือแสดงรายงานข้อผิดพลาดสำหรับชื่อไฟล์ UNIX ที่ถูกต้องเหล่านี้ได้: aux.c, [ 24 ] q"uote"s.txt หรือ NUL.txt
ชื่อไฟล์ NTFS ที่ใช้ภายในระบบ ได้แก่:
$Mft, $MftMirr, $LogFile, $Volume, $AttrDef, $Bitmap, $Boot, $BadClus, $Secure, $Upcase, $Extend, $Quota, $ObjId และ $Reparse
การเปรียบเทียบข้อจำกัดของชื่อไฟล์
ตารางต่อไปนี้อธิบายคุณลักษณะทั่วไปของชื่อไฟล์ตามที่ใช้ในระบบไฟล์สำคัญต่างๆ
| ระบบ | ต้องตรงตามตัวพิมพ์ใหญ่-เล็ก | การรักษาสภาพของเคส | อักขระที่อนุญาต | ข้อจำกัดด้านเนื้อหา | ข้อจำกัดด้านความยาว |
|---|---|---|---|---|---|
| 8 บิต FAT | ? | ? | ASCII 7 บิต(จัดเก็บเป็นไบต์ 8 บิต) | ชื่อต้องไม่ขึ้นต้นด้วยรหัส 0 หรือ 255 | ชื่อไฟล์แบบเรียงลำดับ (ไม่รวมนามสกุล) มีความยาวไม่เกิน 9 ตัวอักษร ส่วนชื่อไฟล์แบบไบนารี มีความยาว 6 ตัวอักษร บวกเพิ่มอีก 3 ตัวอักษร สำหรับนามสกุล |
| FAT12 , FAT16 , FAT32 | เลขที่ | เลขที่ | โค้ดเพจ SBCS / DBCS OEMใดๆ ก็ได้ | ห้ามใช้รหัส 0–31 และ 255, ", *, /, :, <, >, ?, \, |, +, ,, ., ;, =, [; ]ในบางสภาพแวดล้อมยัง!@ห้ามใช้รหัส 0xE5 เป็นอักขระตัวแรกใน DOS 1/2 ด้วยห้ามใช้ชื่ออุปกรณ์ที่ขึ้นต้นด้วย: | ชื่อโดเมนไม่เกิน 8 ตัวอักษร และนามสกุลไม่เกิน 3 ตัวอักษร |
| วีเอฟเอท | เลขที่ | ใช่ | ยูซีเอส-2 | ห้ามใช้รหัส 0–31, ", *, /, :, <, >, ?, \,| | ไม่เกิน 255 ตัวอักษร |
| ไขมันส่วนเกิน | เลขที่ | ใช่ | ยูทีเอฟ-16 | ห้ามใช้รหัส 0–31, ", *, /, :, <, >, ?, \,| | ไม่เกิน 255 ตัวอักษร |
| ระบบไฟล์ NTFS (บน Windows) | ไม่จำเป็น | ใช่ | ยูทีเอฟ-16 | ห้ามใช้รหัส 0–31, ", *, /, :, <, >, ?, \,|ห้ามใช้ชื่ออุปกรณ์ MS-DOS [ a ] [ 25 ] API ของ Win32 จะตัดจุดท้าย และช่องว่างนำหน้าและท้ายออก ยกเว้นเส้นทาง UNC [ b ] | ไม่เกิน 255 ตัวอักษร |
| NTFS (เนมสเปซ POSIX) | ไม่จำเป็น | ใช่ | ยูทีเอฟ-16 | ห้าม/และรหัส 0 | ไม่เกิน 255 ตัวอักษร |
| เอชพีเอฟเอส | เลขที่ | ใช่ | ชุด 8 บิตใดๆ ก็ได้ | ห้าม|, \, ?, *, <, ", :, >,/ | ไม่เกิน 254 ตัวอักษร |
| เอชเอฟเอส | เลขที่ | ใช่ | ชุด 8 บิตใดๆ ก็ได้ | ห้าม: | รองรับได้สูงสุด 255 ตัวอักษร; Finder เวอร์ชันเก่าจำกัดไว้ที่ 31 ตัวอักษร |
| HFS+ [ 26 ] | ไม่จำเป็น | ใช่ | ยูทีเอฟ-16 | ห้ามใช้:บนดิสก์และระบบปฏิบัติการ Mac OS แบบคลาสสิก ; มีการแมประหว่าง:ชื่อไฟล์และ/บนดิสก์ในmacOS | ไม่เกิน 255 ตัวอักษร |
| APFS [ 27 ] | ไม่จำเป็น | ใช่ | UTF-8 [ 28 ] | ห้าม/, [ c ]รหัส 0 | ไม่เกิน 255 ตัวอักษร |
| ยูนิกซ์ (ทั่วไป) | ใช่ | ใช่ | ชุด 8 บิตใดๆ ก็ได้ | ห้าม/, รหัส 0 | ไม่เกิน 255 ตัวอักษร |
| ยูนิกซ์ ( ระบบไฟล์ V7 / S3 / S5 ) | ใช่ | ใช่ | ชุด 8 บิตใดๆ ก็ได้ | ห้าม/, รหัส 0 | ไม่เกิน 14 ตัวอักษร |
| POSIX (ชื่อไฟล์พกพาได้อย่างสมบูรณ์) [ 29 ] | ใช่ | ใช่ | A– Z, a– z, 0– 9, ., _,- | ห้าม ใช้/รหัส 0; อักขระตัวแรกต้องไม่ใช่- | ไม่เกิน 14 ตัวอักษร |
| ระบบไฟล์ MVS แบบคลาสสิกของ z/OS (ชุดข้อมูล) | เลขที่ | เลขที่ | รหัสหน้า EBCDIC | ห้ามใช้ รหัส C0 hex $, #, @, -, อักขระตัวแรกต้องเป็นตัวอักษรหรือภาษาประจำชาติ ( $, #, @) | ไม่เกิน 44 ตัวอักษร |
| ระบบไฟล์ CMS | เลขที่ | เลขที่ | รหัสหน้า EBCDIC | ชื่อไฟล์หลักต้องมีไม่เกิน 8 ตัวอักษร และประเภทไฟล์ต้องมีอีก 8 ตัวอักษร | |
| ไอโอเอส 9660 | เลขที่ | ? | A– Z, 0– 9, _,. | ระดับ 2: สูงสุด 180 (โดยประมาณ); ระดับ 3: สูงสุด 200 | |
| อามิกา OFS | เลขที่ | ใช่ | ชุด 8 บิตใดๆ ก็ได้ | ห้าม:, /, รหัส 0 | ไม่เกิน 30 ตัวอักษร |
| อามิกา เอฟเอฟเอส | เลขที่ | ใช่ | ชุด 8 บิตใดๆ ก็ได้ | ห้าม:, /, รหัส 0 | ไม่เกิน 30 ตัวอักษร |
| อามิกา พีเอฟเอส | เลขที่ | ใช่ | ชุด 8 บิตใดๆ ก็ได้ | ห้าม:, /, รหัส 0 | ไม่เกิน 107 ตัวอักษร |
| อามิกา เอสเอฟเอส | เลขที่ | ใช่ | ชุด 8 บิตใดๆ ก็ได้ | ห้าม:, /, รหัส 0 | ไม่เกิน 107 ตัวอักษร |
| อามิกา เอฟเอฟเอส2 | เลขที่ | ใช่ | ชุด 8 บิตใดๆ ก็ได้ | ห้าม:, /, รหัส 0 | ไม่เกิน 107 ตัวอักษร |
| บีเอฟเอส | ใช่ | ใช่ | ยูทีเอฟ-8 | ห้าม/ | ไม่เกิน 255 ตัวอักษร |
| พีดีพี-11 อาร์ที-11 | เลขที่ | เลขที่ | เรดิกซ์-50 | ชื่อโดเมนสามารถมีได้สูงสุด 6 ตัวอักษร และส่วนขยายสามารถมีได้สูงสุด 3 ตัวอักษร | |
| ไฟล์-11 ODS-1 ( RSX-11 / IAS ) | เลขที่ | เลขที่ | เรดิกซ์-50 | ชื่อโดเมนสามารถมีได้สูงสุด 6 ตัวอักษร และส่วนขยายสามารถมีได้สูงสุด 3 ตัวอักษร | |
| ไฟล์-11 ODS-2 ( (Open)VMS ) | เลขที่ | เลขที่ | A– Z, 0– 9, $, -,_ | แต่ละส่วนประกอบมีความยาวได้สูงสุด 32 ตัวอักษร เดิมกำหนดไว้ที่ 9 ตัวอักษรต่อส่วนประกอบ และปัจจุบันกำหนดไว้ที่ 255 ตัวอักษรสำหรับชื่อไฟล์ และ 32 ตัวอักษรสำหรับนามสกุลไฟล์ | |
| ไฟล์-11 ODS-5 (OpenVMS) | เลขที่ | ตั้งแต่เวอร์ชัน 7.2 | A– Z, 0– 9, $, -,_ | แต่ละส่วนประกอบมีความยาวได้สูงสุด 32 ตัวอักษร เดิมกำหนดไว้ที่ 9 ตัวอักษรต่อส่วนประกอบ และปัจจุบันกำหนดไว้ที่ 255 ตัวอักษรสำหรับชื่อไฟล์ และ 32 ตัวอักษรสำหรับนามสกุลไฟล์ | |
| คอมโมดอร์ ดีโอเอส | ใช่ | ใช่ | ชุด 8 บิตใดๆ ก็ได้ | ห้ามใช้ตัวอักษร:และ=ชื่อ$ | โดยปกติจะจุได้สูงสุด 16 ตัวอักษร ขึ้นอยู่กับไดรฟ์ |
| เอชพี 250 | ใช่ | ใช่ | ชุด 8 บิตใดๆ ก็ได้ | ห้ามใช้ช่องว่าง, ", ,, :, รหัส 0 และ 255 | ไม่เกิน 6 ตัวอักษร |
ดูเพิ่มเติม
- ระบบไฟล์
- ชื่อไฟล์แบบเต็ม
- ชื่อไฟล์ยาว
- เส้นทาง (การคำนวณ)
- สลัก (การเผยแพร่บนเว็บ)
- ลิงก์สัญลักษณ์
- ตัวระบุทรัพยากรสากล (URI)
- ตัวระบุตำแหน่งทรัพยากรสากล (URL) และตัวระบุทรัพยากรระหว่างประเทศ
- หลักเกณฑ์การตั้งชื่อไฟล์ของ Windows (Win32) (ไม่ขึ้นอยู่กับระบบไฟล์)
หมายเหตุ
- ^ AUX, COM0, ..., COM9, COM¹, ..., COM³, CON, LPT0, ..., LPT9, LPT¹, ..., LPT³, NUL และ PRN
- ^ชื่อต้องห้ามในไดเร็กทอรีราก: $AttrDef $BadClus $Bitmap $Boot $LogFile $MFT $MFTMirr pagefile.sys $Secure $UpCase $Volume $Extend $Extend\$ObjId $Extend\$Quota $Extend\$Reparse ($Extend เป็นไดเร็กทอรี)
- ^เนื่องจาก Finder แสดงค่า
:เป็น/จึงดูเหมือนว่า:ถูกห้ามแทนที่จะเป็น/
ลิงก์ภายนอก
- ไลบรารีส่วนขยายไฟล์
- ไฟล์เอ็กซ์
- WikiExt - สารานุกรมส่วนขยายไฟล์
- "การตั้งชื่อไฟล์ เส้นทาง และเนมสเปซ"เอกสารของ Microsoft 15 ธันวาคม 2022
- ชุดอักขระชื่อไฟล์แบบพกพา POSIX ปี 2009
- มาตรฐาน ECMA-208 ธันวาคม 1994 รูปแบบข้อมูลที่ไม่ขึ้นกับระบบ
- แนวปฏิบัติที่ดีที่สุดสำหรับการตั้งชื่อไฟล์สหรัฐอเมริกา:หอสมุดมหาวิทยาลัยสแตนฟอร์ดฝ่ายบริการจัดการข้อมูล เก็บถาวรจากต้นฉบับเมื่อวันที่ 30 กรกฎาคม 2021
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ชื่อไฟล์
ชื่อ ไฟล์ ใช้สำหรับระบุ ไฟล์คอมพิวเตอร์แต่ละไฟล์ ใน ระบบไฟล์ อย่างเฉพาะ เจาะจง ระบบไฟล์แต่ละระบบมีข้อจำกัดเกี่ยวกับความยาวของชื่อไฟล์ที่แตกต่างกัน
ประวัติศาสตร์
ในช่วงทศวรรษ 1970 คอมพิวเตอร์เมนเฟรม และ มินิคอมพิวเตอร์ บางรุ่น มีระบบปฏิบัติการที่ระบุไฟล์ในระบบด้วยชื่อผู้ใช้หรือหมายเลขบัญชี
รูปแบบการตั้งชื่อไฟล์
โปรแกรมและอุปกรณ์ต่างๆ อาจกำหนดชื่อไฟล์โดยอัตโนมัติ เช่น ชื่อตัวเลขนับ (ตัวอย่างเช่น IMG_0001.JPG ) หรือชื่อเวลาพร้อมวันที่และเวลาปัจจุบัน
อ้างอิง: ค่าสัมบูรณ์เทียบกับค่าสัมพัทธ์
การอ้างอิงแบบสัมบูรณ์จะรวมทุกระดับของไดเร็กทอรี ในบางระบบ การอ้างอิงชื่อไฟล์ที่ไม่รวมเส้นทางไดเร็กทอรีแบบเต็มจะใช้ ไดเร็กทอรีปัจจุบัน เป็นค่าเริ่มต้น นี่คือการอ้างอิงแบบสัมพัทธ์...