Augmenter le nombre de caractères dans le champ de nom de fichier de dialogue de sélection de fichier GetOpenFileName

StackOverflow https://stackoverflow.com/questions/361350

Question

Notre application permet plusieurs fichiers à sélectionner dans une boîte de dialogue de sélection de fichier qui est affiché via la fonction GetOpenFileName (cette question s'applique également aux personnes utilisant CFileDialog, etc ...)

Il semble y avoir une limite au nombre de caractères qui peuvent être saisis dans le champ de nom de fichier. (259 semble être le nombre magique - ne sais pas pourquoi)

Nous avons essayé de changer les membres suivants du OPENFILENAME Structure :

lpstrFile - point à notre propre tampon, de taille à 4 Ko octets nMaxFile - définie sur la taille de lpstrFile (nous compilons ANSI, donc c'est effectivement 4000

Mais ces valeurs semblent pas augmenter la largeur d'entrée du champ de nom de fichier dans la boîte de dialogue.

Je vais expérimenter avec l'envoi d'un message EM_SETLIMITTEXT au contrôle, mais je voulais savoir si quelqu'un d'autre solution.

EDIT - résolu moi-même: solution Je ne peux pas accepter ma propre réponse, mais elle est ici pour la postérité. Si quelqu'un d'autre a une meilleure solution, s'il vous plaît poster -. Ou ne hésitez pas à mod ma solution si les chercheurs futurs trouveront en haut

Était-ce utile?

La solution

Il s'avère que le contrôle d'édition (au moins dans mon environnement de développement) est une zone de liste déroulante, donc ne convient pas EM_SETLIMITTEXT.

Au lieu de cela, je traqué la zone de liste déroulante à l'aide du parent GetDlgCtrl du fichier de dialogue ouvert (je le fais dans le gestionnaire OnInitDialog), jeté à CComboBox*, puis appelez pour régler la LimitText() limite.

Cela pourrait aussi se faire en envoyant un message au CB_LIMITTEXT contrôle pour ceux qui ne travaillent pas avec CFileDialog. La valeur appropriée est plus probable que la valeur ici que OPENFIILENAME.nMaxFile est transmise.

Autres conseils

De Nommer un fichier ou un répertoire sur MSDN :

  

Dans l'API Windows (avec quelques exceptions décrites dans les paragraphes suivants), la longueur maximale d'un chemin est MAX_PATH, qui est défini comme 260 caractères.

Même si vous pouvez forcer des chaînes plus longues de la boîte de dialogue, vous pouvez rencontrer des problèmes sur la ligne lors de l'utilisation des API qui ont été codées contre "\\?\".

Les documents vont à dire:

  

L'API Windows a de nombreuses fonctions   qui ont également des versions Unicode à   permettre à un trajet de longueur étendue pour une   longueur totale du trajet maximum de 32767   personnages. Ce type de chemin est   composé d'éléments séparés par   des barres obliques inverses, chacune jusqu'à la valeur   de retour dans la   paramètre de lpMaximumComponentLength   la fonction de GetVolumeInformation. À   spécifier un chemin de longueur étendue, en utilisant   le préfixe "\\?\D:\<very long path>". Par exemple,   <. (Le   caractères sont utilisés > <=> ici pour   clarté visuelle et ne peut pas faire partie d'un   chaîne de chemin valide.)

Je crois que c'est une limite difficile qui ne peut pas être contournée. Le seul moment où il devrait la matière est quand vous voulez sélectionner plusieurs fichiers, car la limite est suffisant pour la longueur du nom de fichier maximum.

J'ai ajouté un bouton « Tous les fichiers » à ces boîtes de dialogue pour ouvrir tous les fichiers dans un dossier; c'est la seule solution que j'ai trouvé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top