Питання в тому, чому обмеження все ще існує. Безумовно, сучасні 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
, це зробив API Windows. Моя програма використовувала це визначене значення.
Моя структура правильно визначена і виділяє лише 592
байти. Це означає, що я можу отримувати лише ім’я файлу, менший за кількість 260
символів. Windows пообіцяла мені, що якщо я правильно напишу заявку, моя програма продовжуватиме працювати в майбутньому.
Якби Windows мала дозволити назви файлів довше, ніж 260
символи, тоді мій існуючий додаток (який правильно використовував правильний API) не зможе.
Для всіх, хто закликає Microsoft змінити MAX_PATH
константу, вони спочатку повинні переконатися, що жодна існуюча програма не працює. Наприклад, я все ще є власником і використовую додаток Windows, яке було написано для роботи в Windows 3.11. Він все ще працює у 64-розрядної Windows 10. Саме тому ви отримуєте зворотну сумісність.
Microsoft зробив створити спосіб використовувати повні імена шляхів 32768; але їм довелося створити новий контракт API, щоб це зробити. Для одного, ви повинні використовувати API Shell для перерахування файлів (оскільки не всі файли існують на жорсткому диску або спільній мережі).
Але вони також повинні не порушувати існуючі користувацькі програми. Переважна більшість додатків не використовують оболонки api для роботи з файлами. Усі просто дзвонять FindFirstFile
/ FindNextFile
і називають це щодня.