Pertanyaannya adalah mengapa batasan itu masih ada. Tentunya Windows modern dapat meningkatkan sisi MAX_PATH
untuk memungkinkan jalur yang lebih panjang. Mengapa batasan belum dihapus?
- Alasan itu tidak bisa dihapus adalah bahwa Windows berjanji tidak akan pernah berubah.
Melalui kontrak API, Windows telah menjamin semua aplikasi bahwa API file standar tidak akan pernah mengembalikan jalur yang lebih panjang daripada 260
karakter.
Pertimbangkan kode yang benar berikut ini :
WIN32_FIND_DATA findData;
FindFirstFile("C:\Contoso\*", ref findData);
Windows menjamin program saya bahwa itu akan mengisi WIN32_FIND_DATA
struktur saya :
WIN32_FIND_DATA {
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
//...
TCHAR cFileName[MAX_PATH];
//..
}
Aplikasi saya tidak menyatakan nilai konstanta MAX_PATH
, API Windows melakukannya. Aplikasi saya menggunakan nilai yang ditentukan itu.
Struktur saya didefinisikan dengan benar, dan hanya mengalokasikan 592
total byte. Itu berarti bahwa saya hanya dapat menerima nama file yang kurang dari 260
karakter. Windows berjanji kepada saya bahwa jika saya menulis aplikasi saya dengan benar, aplikasi saya akan terus berfungsi di masa depan.
Jika Windows mengizinkan nama file lebih panjang dari 260
karakter maka aplikasi saya yang ada (yang menggunakan API yang benar dengan benar) akan gagal.
Bagi siapa pun yang meminta Microsoft untuk mengubah MAX_PATH
konstanta, pertama-tama mereka perlu memastikan bahwa tidak ada aplikasi yang gagal. Misalnya, saya masih memiliki dan menggunakan aplikasi Windows yang ditulis untuk dijalankan pada Windows 3.11. Ini masih berjalan pada Windows 10. 64-bit. Itulah yang membuat kompatibilitas Anda mundur.
Microsoft memang menciptakan cara untuk menggunakan nama path lengkap 32.768; tetapi mereka harus membuat kontrak API baru untuk melakukannya. Untuk satu, Anda harus menggunakan Shell API untuk menghitung file (karena tidak semua file ada di hard drive atau jaringan berbagi).
Tetapi mereka juga harus tidak merusak aplikasi pengguna yang ada. Sebagian besar aplikasi tidak menggunakan api shell untuk kerja file. Semua orang hanya menelepon FindFirstFile
/ FindNextFile
dan menyebutnya sehari.