2011-01-25 7 views
5

Ho alcuni file su un server che superano il limite MAX_PATH. Ho sentito ripetutamente che è possibile elencare quei file pre-in attesa \\? \ Sul percorso. Tuttavia, ciò non risolve il problema con FindFirstFile[Ex] e i suoi partner poiché utilizzano una struttura dati che limita la lunghezza del nome del file a MAX_PATH.Come eseguire iterazioni su nomi di percorso lunghi con qualsiasi forma dell'API di Windows

C'è un altro modo per scorrere sulla struttura della directory per trovare i file che hanno un nome troppo lungo? Ho visto utility che lo fanno ma nessuno di loro è disponibile in forma sorgente.

Si noti che ho visto le voci del blog da persone BCL .NET e seguito i collegamenti che forniscono.

Preferirei farlo in C o C++ per semplicità, ma qualsiasi linguaggio disponibile per ora lo farà.

Puntatori a codice, documenti o qualsiasi cosa utile sono apprezzati.

risposta

9

Non penso che ci sia un problema qui. Ti riferisci allo WIN32_FIND_DATA che restituisce effettivamente nomi di file di lunghezza limitata a MAX_PATH. Ma dal momento che questa è solo la parte del nome file e il percorso è omesso, non vi è alcuna limitazione.

All'interno di una directory, un oggetto (file o cartella) ha una lunghezza limitata, in genere a 255 caratteri. È possibile determinare qual è questo limite con il parametro lpMaximumComponentLength di GetVolumeInformation. Sarei sorpreso se qualsiasi volume montato in Windows potesse avere una lunghezza massima del componente superiore a 255.

La chiamata a FindFirstFile riceve una stringa con terminazione nulla, lpFileName che specifica la directory e il nome file (ad esempio "* .txt ", dire) per cercare. Gli stati di documentazione:

Nella versione ANSI di questa funzione, il nome è limitato a MAX_PATH caratteri. Per estendere questo limite ai 32647 caratteri widescreen , chiamare la versione Unicode della funzione e anteporre "\\? \" Al percorso.

+0

Grazie David, hai avuto assolutamente ragione. Questo è quello che ottengo per non tentare di utilizzare l'API prima di chiedere. :) Un'ottimizzazione davvero prematura? – JimR

Problemi correlati