Je travaille sur une application qui parcourt tous les fichiers de certains répertoires et effectue des actions sur ces fichiers. Entre autres, je dois récupérer la taille du fichier et la date à laquelle ce fichier a été modifié.
Certains noms complets de fichiers (répertoire + nom de fichier) étant trop longs, je n'ai pas pu utiliser le .NET Framework. FileInfo
qui se limite à MAX_PATH
(260 caractères). De nombreuses sources web conseillent d'utiliser les fonctions natives Win32 via P/Invoke pour accéder aux fichiers dont les noms sont trop longs.
Actuellement, le même problème semble se poser avec les fonctions Win32. Par exemple, GetFileAttributesEx
(kernel32.dll) échoue avec l'erreur Win32 3 ERROR_PATH_NOT_FOUND pour le chemin de 270 octets.
Le même fichier peut être ouvert avec succès à partir du Bloc-notes2 et affiché avec succès avec l'Explorateur Windows (mais Visual Studio 2010, par exemple, ne parvient pas à l'ouvrir en raison de la limite de 259 caractères¹).
Que puis-je faire pour pouvoir accéder à un fichier lorsque le chemin d'accès est long de 270 caractères ?
Notes :
-
Supprimer ou ignorer les fichiers dont le chemin d'accès comporte plus de 259 caractères n'est pas une solution.
-
Je recherche uniquement des solutions compatibles avec Unicode.
-
L'application fonctionnera sous Windows 2008/Vista ou une version ultérieure avec .NET Framework 4 installé.
¹ Étonnamment, Microsoft Word 2007 échoue, se plaignant que "la disquette est trop petite" sur un ordinateur qui n'a pas de lecteur de disquette, ou que "la mémoire RAM est faible" alors qu'il reste 4 Go de RAM, ou enfin que "le logiciel antivirus [...] doit être mis à jour". Cesseront-ils un jour d'afficher des erreurs aussi stupides et dénuées de sens, au moins dans des produits aussi essentiels que Microsoft Office ?