2009-12-01 5 views
1

J'utilise un SaveFileDialog et dois définir une longue chaîne (longFileName) dans FileName. La chaîne longFileName est connue à l'exécution.Comment définir la chaîne longue (> 260) par défaut FileName dans SaveFileDialog?

Si je mets

saveFileDialog.FileName = longFileName ; 

puis-je obtenir System.IO.PathTooLongException.

Comment puis-je le faire?

+0

Avec "nomfichier", voulez-vous dire le nom complet, y compris son chemin ou juste le nom par rapport à son dossier parent? – MSalters

Répondre

6

La ligne inférieure est ... vous ne pouvez pas, NTFS a une taille de fichier maximale de 256. Mon conseil, raccourcir votre nom de fichier.

0

Vous ne pouvez pas. N'oubliez pas que les chemins d'accès à 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?

1

La réponse se trouve dans ce qui suit:

Q: Quel est le nombre maximum de caractères d'un nom de fichier peut être? R: Cela dépend si le fichier est en cours de création sur une partition FAT ou NTFS. La longueur maximale du nom de fichier sur une partition NTFS est de 256 caractères et de 11 caractères sur FAT (nom à 8 caractères, extension à 3 caractères). Les noms de fichiers NTFS conservent leur cas, tandis que les noms de fichiers FAT n'ont aucun concept de cas (cependant, le cas est ignoré lors de l'exécution d'une recherche, etc. sur NTFS). Il y a le nouveau VFAT qui a aussi 256 noms de fichiers de caractères.

Source

Fondamentalement, le système d'exploitation détermine la taille du fichier max, pas votre application. Si un système de fichiers plus performant est disponible à l'avenir et qu'il prend en charge plus de caractères, vous pouvez toujours rendre votre logiciel compatible en l'autorisant, et en informant l'utilisateur lorsque le chemin est trop long pour l'instant. Cependant, avec les progrès actuels de la technologie, vous ne pouvez pas utiliser un nom de fichier supérieur à 256 caractères.

1

Vous pouvez essayer la version courte du chemin du nom de fichier à l'aide:

[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); 

Ensuite, la boîte de dialogue de fichier de sauvegarde ressemblerait à quelque chose comme 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(); 
0

Comme d'autres l'ont mentionné, il n'y a pas de bonne façon de contourner cette limitation. Cependant, le problème n'est pas avec NTFS, c'est Win32. En utilisant SFU vous pouvez faire des chemins ridiculement longs si vous le voulez vraiment, mais cela rend intéressant l'interopérabilité avec des trucs natifs de Win32.

Vous pouvez essayer d'ajouter le chemin précédé de \\? \. Je n'ai jamais essayé cela avec .NET cependant.

0

Ajoutez \\?\ au début du chemin. Donc D:\<very_long_path> deviendrait \\?\D:\<very_long_path>. Voir pour référence "Maximum Path Length Limitation" dans http://msdn.microsoft.com/en-us/library/aa365247.aspx

+0

'File.Create (@" \\? \ "+ FilePath, (int) fichier.Value.Length)'> Est-ce correct? Je ne peux pas créer un fichier dans un dossier avec très longtemps! PathTooLongException Exception – ridermansb

Questions connexes