Fehler in COpenFileDialog
-
Hallo zusammen!
Ich erzeuge folgenden ofd:
CFileDialog dlg(true, NULL, NULL, OFN_ALLOWMULTISELECT | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST, _T("Data-Files (*.ddd)|*.ddd"));Nun habe ich das Problem, dass DoModal jedesmal, wenn ich mehr als 3 Files auswähle und auf Open klicke, mit IDCANCEL zurückkommt!? Wähle ich 1 - 3 Files aus funktioniert alles wie gewollt und er kommt auch mit IDOK zurück.
Ist das ein bekannter Bug oder hab ich doch irgendwas übersehen, was in meinem Code falsch sein könnte?
danke, mfg
mike
-
ich wuerd sagen du musst noch buffer freigeben
das hatte ich mal gemacht {schon ne ganze weile her}
CFileDialog fOpen( TRUE, NULL, NULL, OFN_ALLOWMULTISELECT | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, NULL, NULL, 0 ); TCHAR *Buffer = 0; // target for the buffer fOpen.GetOFN().nMaxFile = BufferSize; Buffer = ( TCHAR * )malloc( BufferSize * sizeof( TCHAR ) ); // reserve space memset( Buffer, 0, BufferSize * sizeof( TCHAR ) ); // clear the buffer fOpen.GetOFN().lpstrFile = Buffer; // set maximum buffer if(IDOK == fOpen.DoModal()) // if "OK" clicked {
-
Vielen dank mal für die schnelle Antwort. Hätte da noch eine Frage:
Wie groß soll die BufferSize für nMaxFile sein? Im Vorhinein weiß ich ja nicht, wieviele Datien ausgewählt werden.
Werde dazu aus der Doku leider nicht schlau...
danke, mfg
-
in meinem programm hatte ich
#define BUFFER_SIZE_CHARS ( 32*1024 )
kA fuer wieviel das ist #gg
-
Ok, ich weiß zwar jetzt nicht, wie man auf die Zahl kommt, aber es funktioniert soweit (vorerst getestet mit 5 Dateien).
Vielleicht kann ja noch jemand erklären, wie groß der Buffer (und warum) sein sollte?
-
MSDN schrieb:
nMaxFile
Specifies the size, in TCHARs, of the buffer pointed to by lpstrFile. For the ANSI version, this is the number of bytes; for the Unicode version, this is the number of characters. The buffer must be large enough to store the path and file name string or strings, including the terminating NULL character. The GetOpenFileName and GetSaveFileName functions return FALSE if the buffer is too small to contain the file information. The buffer should be at least 256 characters long.
-
suamikim schrieb:
Vielleicht kann ja noch jemand erklären, wie groß der Buffer [sein sollte?]
Kommt auf das Programm an, wenn maximal nur 4 bearbeitet werden können, müssen auch nur 4 Dateien ausgewählt werden. Wenn mehr ausgewählt werden kann ja eine Nachrichtenbox erscheinen (Fehler: Zu viele Dateien). Man muss nur überlegen wie viele Dateien aufeinmal sinnvoller Weise aufgerufen werden sollen.
Es gibt jedoch meines Wissen eine Grenze die etwa bei2 hoch 16 - 1 = 65535Zeichen liegen sollte. Ein Eingabefeld kann / konnte (Win 95 - wenn ich mich nicht irre) nicht mehr Zeichen aufnehmen. Ein Pfad einer Datei ist bis zu 512 Zeichen (das ist vielleicht übertrieben) lang - d.h. maximal 128 Dateien.
suamikim schrieb:
[...](und warum)[...]?
Wenn mehrere Dateien augewählt werden kommen die Pfade in das Eingabefeld in folgendem Format:
"C:\Datei001.txt" "D:\Datei.002" ...Wenn aber im Buffer nur Platz für zum Beispiel 7 Pfade Platz sind, acht aber ausgewählt werden, dann lautet der letzte Pfad:
"C:\Windows\System3"und nicht
"C:\Windows\System32\cmd.exe".
Folgende Fehler treten auf:- Es gibt keines äquivalentes Gegenanführungszeichen
- Es gibt keine Datei System3 in C:\Windows
Mit freundlichen Grüßen und hoffendlich nicht zu spät
Rhombicosidodecahedron
-
Vielen dank für die ausführliche Erklärung. Nun blicke ich auf jeden Fall durch

Mit freundlichen Grüßen und hoffendlich nicht zu spät
Also zu spät war das auf keinen Fall, das Programm ist ja noch bei weitem nicht fertig

mfg
mike