คำถามคือทำไมข้อ จำกัด ยังคงมีอยู่ Windows ที่ทันสมัยอย่างแท้จริงสามารถเพิ่มด้านของMAX_PATH
การอนุญาตเส้นทางที่ยาวขึ้น ทำไมข้อ จำกัด จึงไม่ถูกลบออก?
- เหตุผลที่ไม่สามารถลบได้คือ Windows สัญญาว่าจะไม่เปลี่ยนแปลง
ด้วยสัญญา API, Windows รับประกันแอปพลิเคชันทั้งหมดว่า API ไฟล์มาตรฐานจะไม่ส่งคืนพา ธ ที่ยาวกว่า260
อักขระ
พิจารณารหัสที่ถูกต้องต่อไปนี้:
WIN32_FIND_DATA findData;
FindFirstFile("C:\Contoso\*", ref findData);
Windows รับประกันโปรแกรมของฉันว่าจะเติมWIN32_FIND_DATA
โครงสร้างของฉัน:
WIN32_FIND_DATA {
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
//...
TCHAR cFileName[MAX_PATH];
//..
}
แอปพลิเคชันของฉันไม่ได้ประกาศค่าคงที่MAX_PATH
ซึ่ง Windows API ทำได้ แอปพลิเคชันของฉันใช้ค่าที่กำหนดไว้
โครงสร้างของฉันถูกกำหนดอย่างถูกต้องและจัดสรร592
ผลรวมไบต์เท่านั้น นั่นหมายความว่าฉันสามารถรับชื่อไฟล์ที่น้อยกว่า260
ตัวอักษรเท่านั้น Windows สัญญากับฉันว่าถ้าฉันเขียนแอปพลิเคชันของฉันถูกต้องแอปพลิเคชันของฉันจะยังคงทำงานต่อไปในอนาคต
หาก Windows อนุญาตให้มีชื่อไฟล์ยาวกว่า260
ตัวอักษรดังนั้นแอปพลิเคชันที่มีอยู่ของฉัน (ซึ่งใช้ API ที่ถูกต้องอย่างถูกต้อง) จะล้มเหลว
สำหรับใครก็ตามที่เรียกร้องให้ Microsoft เปลี่ยนMAX_PATH
ค่าคงที่พวกเขาต้องแน่ใจก่อนว่าไม่มีแอปพลิเคชันที่มีอยู่ล้มเหลว ตัวอย่างเช่นฉันยังเป็นเจ้าของและใช้แอปพลิเคชัน Windows ที่เขียนขึ้นเพื่อใช้งานบน Windows 3.11 มันยังทำงานบน Windows 64 บิต 64 นั่นคือสิ่งที่เข้ากันได้กับคุณ
Microsoft ได้สร้างวิธีการใช้ชื่อพา ธ แบบเต็ม 32,768 ชื่อ แต่พวกเขาต้องสร้างสัญญา API ใหม่เพื่อทำ สำหรับหนึ่งคุณควรใช้Shell APIเพื่อระบุไฟล์ (เนื่องจากไม่มีไฟล์ทั้งหมดที่มีอยู่ในฮาร์ดไดรฟ์หรือเครือข่ายที่ใช้ร่วมกัน)
แต่พวกเขายังต้องไม่ทำลายแอปพลิเคชันผู้ใช้ที่มีอยู่ แอปพลิเคชั่นส่วนใหญ่ไม่ได้ใช้ shell api สำหรับงานไฟล์ ทุกคนแค่โทรFindFirstFile
/ FindNextFile
และเรียกมันต่อวัน