Come gestire i file con un nome più lungo di 259 caratteri?

Sto lavorando a un’applicazione che percorre tutti i file in alcune directory e fa alcune azioni con questi file. Tra l’altro, devo recuperare la dimensione del file e la data in cui questo file è stato modificato.

Alcuni nomi di file completi (directory + nome file) sono troppo lunghi, non è ansible utilizzare .NET Framework FileInfo , che è limitato a MAX_PATH (260 caratteri). Molte fonti Web consigliano di utilizzare le funzioni native Win32 tramite P / Invoke per accedere ai file i cui nomi sono troppo lunghi.

Attualmente, lo stesso identico problema sembra sorgere con le funzioni Win32. Ad esempio, GetFileAttributesEx (kernel32.dll) non riesce con errore Win32 3 ERROR_PATH_NOT_FOUND per il percorso di 270 byte.

Lo stesso file può essere aperto con successo da Notepad2 e visualizzato con successo con Windows Explorer (ma ad esempio Visual Studio 2010 non riesce ad aprirlo a causa del limite di 259 caratteri¹).

Cosa posso fare per poter accedere a un file quando il percorso del file è lungo 270 caratteri?

Gli appunti:

  • Rimuovere o ignorare i file con una lunghezza del percorso file superiore a 259 caratteri non è una soluzione.

  • Sto cercando solo soluzioni compatibili con Unicode.

  • L’applicazione verrà eseguita con Windows 2008 / Vista o versioni successive con .NET Framework 4 installato.


¹ Sorprendentemente, Microsoft Word 2007 fallisce, lamentando che “il floppy disk è troppo piccolo” su un computer che non ha alcuna unità floppy, o che “la memoria RAM è bassa” quando sono rimasti 4 GB di RAM, o infine quello “il software antivirus […] deve essere aggiornato”. Si fermeranno un giorno a mostrare errori così stupidamente insignificanti almeno in prodotti chiave come Microsoft Office?