La domanda è: perché esiste ancora la limitazione. Sicuramente le moderne finestre possono aumentare il lato MAX_PATH
per consentire percorsi più lunghi. Perché la limitazione non è stata rimossa?
- Il motivo per cui non può essere rimosso è che Windows ha promesso che non cambierà mai.
Attraverso il contratto API, Windows ha garantito a tutte le applicazioni che le API dei file standard non restituiranno mai un percorso più lungo dei 260
caratteri.
Considera il seguente codice corretto :
WIN32_FIND_DATA findData;
FindFirstFile("C:\Contoso\*", ref findData);
Windows ha garantito al mio programma che avrebbe popolato la mia WIN32_FIND_DATA
struttura:
WIN32_FIND_DATA {
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
//...
TCHAR cFileName[MAX_PATH];
//..
}
La mia applicazione non ha dichiarato il valore della costante MAX_PATH
, l'API di Windows l'ha fatto. La mia applicazione ha usato quel valore definito.
La mia struttura è definita correttamente e alloca solo i 592
byte totali. Ciò significa che sono in grado di ricevere solo un nome file inferiore a 260
caratteri. Windows mi ha promesso che se avessi scritto la mia domanda correttamente, la mia applicazione avrebbe continuato a funzionare in futuro.
Se Windows dovesse consentire nomi di file più lunghi dei 260
caratteri, la mia applicazione esistente (che utilizzava correttamente l'API corretta) avrebbe esito negativo.
Per chiunque richieda a Microsoft di modificare la MAX_PATH
costante, è necessario innanzitutto assicurarsi che nessuna applicazione esistente abbia esito negativo. Ad esempio, possiedo ancora e utilizzo un'applicazione Windows scritta per l'esecuzione su Windows 3.11. Funziona ancora su Windows 10 a 64 bit. Questo è ciò che ti rende compatibile con le versioni precedenti.
Microsoft ha creato un modo per utilizzare i 32.768 nomi di percorso completi; ma hanno dovuto creare un nuovo contratto API per farlo. Per uno, è necessario utilizzare l' API Shell per enumerare i file (poiché non tutti i file esistono su un disco rigido o una condivisione di rete).
Ma devono anche non rompere le applicazioni utente esistenti. La stragrande maggioranza delle applicazioni non utilizza l'API della shell per il lavoro dei file. Tutti chiamano FindFirstFile
/ FindNextFile
e lo chiamano un giorno.