1 votes

Comment définir une longue chaîne (>260) comme nom de fichier par défaut dans le SaveFileDialog ?

J'utilise un SaveFileDialog et je dois définir une longue chaîne (longFileName) dans FileName. La chaîne longFileName est connue au moment de l'exécution.

Si je mets

saveFileDialog.FileName = longFileName ;

alors j'obtiens System.IO.PathTooLongException .

Comment puis-je le faire ?

5voto

James Points 40024

En fin de compte... vous ne pouvez pas, NTFS a une taille maximale de 256 noms de fichiers. Mon conseil, raccourcissez votre nom de fichier.

4voto

JMarsch Points 9814

Bien que vous puissiez avoir des noms de fichiers de plus de 260 caractères, vous pouvez rencontrer des problèmes avec l'API. De plus, .net ne le prend pas directement en charge.

Si vous voulez plus d'informations, voici un lien vers le premier des trois billets publiés sur le blog de l'équipe BCL à ce sujet : http://blogs.msdn.com/bclteam/archive/2007/02/13/long-paths-in-net-part-1-of-3-kim-hamilton.aspx

1voto

Jrud Points 475

La réponse est la suivante :

Q : Quel est le nombre maximum de caractères que peut contenir un nom de fichier ?

R : Cela dépend si le fichier est créé sur une partition FAT ou NTFS. La longueur maximale d'un nom de fichier sur une partition NTFS est de 256 caractères, et de 11 caractères sur une partition FAT (nom de 8 caractères, extension de 3 caractères). Les noms de fichiers NTFS conservent leur casse, alors que les noms de fichiers FAT n'ont pas de notion de casse (cependant la casse est ignorée lors d'une recherche etc. sur NTFS). Il existe la nouvelle VFAT qui possède également des noms de fichiers de 256 caractères.

Source :

En fait, c'est le système d'exploitation qui détermine la taille maximale du fichier, et non votre application. Si un meilleur système de fichiers est publié à l'avenir et prend en charge davantage de caractères, vous pouvez toujours rendre votre logiciel compatible avec l'avenir en l'autorisant et en informant l'utilisateur lorsque le chemin est trop long pour le moment. Cependant, avec les progrès actuels de la technologie, vous ne pouvez pas utiliser un nom de fichier de plus de 256 caractères.

1voto

SwDevMan81 Points 22634

Vous pouvez essayer la version courte du nom du fichier en utilisant :

  [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
  public static extern int GetShortPathName(
     [MarshalAs(UnmanagedType.LPTStr)] System.String path,
     [MarshalAs(UnmanagedType.LPTStr)] System.Text.StringBuilder shortPath,
     System.Int32 shortPathLength);

La boîte de dialogue d'enregistrement du fichier ressemblerait alors à ceci :

     string long_path = @"C:\Program Files\Microsoft Visual Studio 8\Common7\Packages\Debugger\1033\vsdebugui.dll";
     StringBuilder s = new StringBuilder(long_path.Length);
     int short_path_length = GetShortPathName(long_path, s, long_path.Length);
     string short_path = s.ToString();
     SaveFileDialog save_d = new SaveFileDialog();
     save_d.FileName = short_path;
     save_d.ShowDialog();

0voto

SLaks Points 391154

Tu ne peux pas.

N'oubliez pas que les chemins d'accès sous Windows doivent comporter moins de 256 caractères. (Sauf si vous utilisez une astuce spéciale)

Pourquoi voulez-vous un nom de fichier aussi long en premier lieu ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X