กลับไปหน้าบทความ

อ่าน 9 นาที

ชื่อไฟล์

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

ชื่อไฟล์

ภาพหน้าจอของ หน้าต่างคำสั่ง Windowsที่แสดงชื่อไฟล์ในไดเร็กทอรี
รายการชื่อไฟล์ พร้อมชื่อไฟล์ยาวที่มีเครื่องหมายจุลภาคและช่องว่างตามที่ปรากฏในหน้าจอซอฟต์แวร์

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

ชื่อไฟล์อาจประกอบด้วย (ขึ้นอยู่กับระบบไฟล์) ดังต่อไปนี้:

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

อักขระที่อนุญาตในชื่อไฟล์ขึ้นอยู่กับระบบไฟล์ ระบบไฟล์ส่วนใหญ่รองรับตัวอักษร 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 ด้วย

ห้ามใช้ชื่ออุปกรณ์ที่ขึ้นต้นด้วย: $IDLE$, AUX, COM1... COM4, CON, CONFIG$, CLOCK$, KEYBD$, LPT1... LPT4, LST, NUL, PRN, SCREEN$; ขึ้นอยู่กับAVAILDEVสถานะในทุกที่หรือเฉพาะใน\DEV\ไดเร็กทอรี เสมือนเท่านั้น

ชื่อโดเมนไม่เกิน 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 ]ใช่ ใช่ AZ, az, 09, ., _,-ห้าม ใช้/รหัส 0; อักขระตัวแรกต้องไม่ใช่-ไม่เกิน 14 ตัวอักษร
ระบบไฟล์ MVS แบบคลาสสิกของ z/OS (ชุดข้อมูล) เลขที่ เลขที่ รหัสหน้า EBCDICห้ามใช้ รหัส C0 hex $, #, @, -, อักขระตัวแรกต้องเป็นตัวอักษรหรือภาษาประจำชาติ ( $, #, @) ไม่เกิน 44 ตัวอักษร
ระบบไฟล์ CMSเลขที่ เลขที่ รหัสหน้า EBCDICชื่อไฟล์หลักต้องมีไม่เกิน 8 ตัวอักษร และประเภทไฟล์ต้องมีอีก 8 ตัวอักษร
ไอโอเอส 9660เลขที่ ? AZ, 09, _,.ระดับ 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 ) เลขที่ เลขที่ AZ, 09, $, -,_แต่ละส่วนประกอบมีความยาวได้สูงสุด 32 ตัวอักษร เดิมกำหนดไว้ที่ 9 ตัวอักษรต่อส่วนประกอบ และปัจจุบันกำหนดไว้ที่ 255 ตัวอักษรสำหรับชื่อไฟล์ และ 32 ตัวอักษรสำหรับนามสกุลไฟล์
ไฟล์-11 ODS-5 (OpenVMS) เลขที่ ตั้งแต่เวอร์ชัน 7.2 AZ, 09, $, -,_แต่ละส่วนประกอบมีความยาวได้สูงสุด 32 ตัวอักษร เดิมกำหนดไว้ที่ 9 ตัวอักษรต่อส่วนประกอบ และปัจจุบันกำหนดไว้ที่ 255 ตัวอักษรสำหรับชื่อไฟล์ และ 32 ตัวอักษรสำหรับนามสกุลไฟล์
คอมโมดอร์ ดีโอเอสใช่ ใช่ ชุด 8 บิตใดๆ ก็ได้ ห้ามใช้ตัวอักษร:และ=ชื่อ$โดยปกติจะจุได้สูงสุด 16 ตัวอักษร ขึ้นอยู่กับไดรฟ์
เอชพี 250ใช่ ใช่ ชุด 8 บิตใดๆ ก็ได้ ห้ามใช้ช่องว่าง, ", ,, :, รหัส 0 และ 255 ไม่เกิน 6 ตัวอักษร

ดูเพิ่มเติม

หมายเหตุ

  1. ^ AUX, COM0, ..., COM9, COM¹, ..., COM³, CON, LPT0, ..., LPT9, LPT¹, ..., LPT³, NUL และ PRN
  2. ^ชื่อต้องห้ามในไดเร็กทอรีราก: $AttrDef $BadClus $Bitmap $Boot $LogFile $MFT $MFTMirr pagefile.sys $Secure $UpCase $Volume $Extend $Extend\$ObjId $Extend\$Quota $Extend\$Reparse ($Extend เป็นไดเร็กทอรี)
  3. ^เนื่องจาก Finder แสดงค่า:เป็น/จึงดูเหมือนว่า:ถูกห้ามแทนที่จะเป็น/
  • ไลบรารีส่วนขยายไฟล์
  • ไฟล์เอ็กซ์
  • WikiExt - สารานุกรมส่วนขยายไฟล์
  • "การตั้งชื่อไฟล์ เส้นทาง และเนมสเปซ"เอกสารของ Microsoft 15 ธันวาคม 2022
  • ชุดอักขระชื่อไฟล์แบบพกพา POSIX ปี 2009
  • มาตรฐาน ECMA-208 ธันวาคม 1994 รูปแบบข้อมูลที่ไม่ขึ้นกับระบบ
  • แนวปฏิบัติที่ดีที่สุดสำหรับการตั้งชื่อไฟล์สหรัฐอเมริกา:หอสมุดมหาวิทยาลัยสแตนฟอร์ดฝ่ายบริการจัดการข้อมูล เก็บถาวรจากต้นฉบับเมื่อวันที่ 30 กรกฎาคม 2021
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Filename&oldid=1346596796 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ ชื่อไฟล์

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

ประวัติศาสตร์

ในช่วงทศวรรษ 1970 คอมพิวเตอร์เมนเฟรม และ มินิคอมพิวเตอร์ บางรุ่น มีระบบปฏิบัติการที่ระบุไฟล์ในระบบด้วยชื่อผู้ใช้หรือหมายเลขบัญชี

รูปแบบการตั้งชื่อไฟล์

โปรแกรมและอุปกรณ์ต่างๆ อาจกำหนดชื่อไฟล์โดยอัตโนมัติ เช่น ชื่อตัวเลขนับ (ตัวอย่างเช่น IMG_0001.JPG ) หรือชื่อเวลาพร้อมวันที่และเวลาปัจจุบัน

อ้างอิง: ค่าสัมบูรณ์เทียบกับค่าสัมพัทธ์

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