Erhöhen Anzahl von Zeichen in Dateinamen Feld GetOpenFileName Dateiauswahldialog
-
21-08-2019 - |
Frage
Unsere App ermöglicht es, mehrere Dateien werden in einem Dateiauswahldialog ausgewählt, die über die GetOpenFileName Funktion angezeigt wird (diese Frage gilt auch für Leute mit CFileDialog, etc ...)
Es erscheint eine Begrenzung für die Anzahl der Zeichen zu sein, die in den Dateinamen Feld eingegeben werden kann. (259 scheint die magische Zahl zu sein - nicht sicher, warum)
Wir haben versucht, die Änderung der folgenden Mitglieder des OPENFILE Struktur:
LpstrFile - Punkt zu unseren eigenen Puffer bei 4 K Bytes Größe nMaxFile - auf die Größe LpstrFile (wir ANSI kompilieren, so ist dies effektiv 4000
Aber diese Werte scheinen nicht die Eingangsbreite des Dateinamenfeldes im Dialog zu erhöhen.
Ich werde mit dem Senden einer EM_SETLIMITTEXT Nachricht an das Steuerelement experimentieren, aber wollte wissen, ob jemand eine Lösung hat.
EDIT - gelöst diese selbst: Lösung ich kann meine eigene Antwort nicht akzeptieren, aber hier ist es für die Nachwelt. Wenn jemand anderes eine bessere Lösung hat, bitte posten -. Oder fühlen Sie sich frei, meine Lösung so zukünftige Forscher wird es finden an der Spitze mod up
Lösung
Es stellte sich heraus, dass die Bearbeitungssteuer (zumindest in meiner Entwicklungsumgebung) ist ein Kombinationsfeld, so EM_SETLIMITTEXT
ist nicht angemessen.
Stattdessen aufgespürt ich das Kombinationsfeld auf der übergeordneten der Datei öffnen Dialog mit GetDlgCtrl
(Ich tue dies in der OnInitDialog
Handler), warf es CComboBox*
, dann LimitText()
rufen Sie die Grenze zu setzen.
Dies ist auch durch das Senden einer CB_LIMITTEXT
Nachricht an das Steuerelement für die von Ihnen getan werden könnte, die nicht mit CFileDialog
arbeiten. Der entsprechende Wert hier ist wahrscheinlich der OPENFIILENAME.nMaxFile
Wert, der in übergeben wird.
Andere Tipps
eine Datei oder ein Verzeichnis auf MSDN Naming:
In dem Windows-API (mit einigen Ausnahmen in den folgenden Abschnitten beschrieben), die maximale Länge für einen Pfad
MAX_PATH
ist, die als 260 Zeichen definiert ist.
Auch wenn Sie längere Strings aus dem Dialog zwingen könnte, die Sie in die Bredouille führen kann bei der Verwendung von APIs, die gegen MAX_PATH
codiert wurden.
Die Dokumente gehen zu sagen:
Der Windows-API verfügt über viele Funktionen dass auch Unicode-Versionen ermöglichen eine erweiterte Länge Pfad für eine maximale Gesamtpfadlänge 32.767 Figuren. Diese Art des Pfades ist bestehend aus getrennten Komponenten durch Schrägstriche, die jeweils bis zu dem Wert in der zurück lpMaximumComponentLength Parameter die GetVolumeInformation Funktion. Zu geben eine erweiterte Länge Pfad verwenden der
"\\?\"
Präfix. Zum Beispiel,"\\?\D:\<very long path>"
. (Das Zeichen<
>
verwendet werden, hier für visuelle Klarheit und Teil eines kann nicht sein, gültige Pfad-String.)
Ich glaube, das eine harte Grenze ist, die nicht umgangen werden können. Das einzige Mal, es sollte Angelegenheit ist, wenn Sie mehr als eine Datei auswählen möchten, da der Grenzwert für die maximale Länge des Dateinamens genug ist.
Ich habe ein „Alle Dateien“, um diese Dialoge hinzugefügt, um alle Dateien in einem Ordner zu öffnen; das ist die einzige Abhilfe, die ich gefunden habe.