Pytanie brzmi, dlaczego ograniczenie wciąż istnieje. Z pewnością nowoczesny system Windows może zwiększyć stronę, MAX_PATH
aby umożliwić dłuższe ścieżki. Dlaczego ograniczenie nie zostało usunięte?
- Nie można go usunąć dlatego, że Windows obiecał, że nigdy się nie zmieni.
Dzięki umowie interfejsu API system Windows gwarantuje wszystkim aplikacjom, że standardowe interfejsy API plików nigdy nie zwrócą ścieżki dłuższej niż 260
znaki.
Rozważ następujący poprawny kod:
WIN32_FIND_DATA findData;
FindFirstFile("C:\Contoso\*", ref findData);
Windows zagwarantował programowi, że zapełni moją WIN32_FIND_DATA
strukturę:
WIN32_FIND_DATA {
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
//...
TCHAR cFileName[MAX_PATH];
//..
}
Moja aplikacja nie zadeklarowała wartości stałej MAX_PATH
, tak jak Windows API. Moja aplikacja wykorzystała tę zdefiniowaną wartość.
Moja struktura jest poprawnie zdefiniowana i przydziela tylko 592
bajty ogółem. Oznacza to, że mogę otrzymać tylko nazwę pliku składającą się z mniej niż 260
znaków. Windows obiecał mi, że jeśli poprawnie napisam moją aplikację, będzie ona nadal działać w przyszłości.
Gdyby system Windows zezwolił na nazwy plików dłuższe niż 260
znaki, moja istniejąca aplikacja (która prawidłowo używała poprawnego interfejsu API) nie działałaby.
Każdy, kto wzywa Microsoft do zmiany MAX_PATH
stałej, musi najpierw upewnić się, że żadna istniejąca aplikacja nie uległa awarii. Na przykład nadal posiadam i używam aplikacji Windows, która została napisana do działania w systemie Windows 3.11. Nadal działa na 64-bitowym systemie Windows 10. Właśnie to zapewnia kompatybilność wsteczna.
Microsoft zrobił stworzyć drogę do korzystania z pełnych 32.768 nazw ścieżek; ale musieli stworzyć nową umowę API, aby to zrobić. Po pierwsze, powinieneś użyć Shell API do wyliczenia plików (ponieważ nie wszystkie pliki istnieją na dysku twardym lub w udziale sieciowym).
Ale nie muszą również łamać istniejących aplikacji użytkownika. Zdecydowana większość aplikacji nie używa interfejsu API powłoki do pracy z plikami. Wszyscy tylko dzwonią FindFirstFile
/ FindNextFile
i dzwonią na jeden dzień.