OPENFILENAME mit dem Flag OFN_ALLOWMULTISELECT ...-> Ich griegs nit hin :(
-
Hallo zusammen
,Also ich habe jetzt meinen Öffnen-Dialog erfolgreich erstellen können, nämlich so:
OPENFILENAME ofnOpenFile; TCHAR szSelectedFile[(MAX_PATH * 100) + 1]; ZeroMemory(szSelectedFile, sizeof(CSTRG) * (MAX_PATH * 100) + 1); // Struktur für 'Öffnen-Dialog' füllen: ZeroMemory(&ofnOpenFile, sizeof(OPENFILENAME)); ofnOpenFile.lStructSize = sizeof(OPENFILENAME); ofnOpenFile.hwndOwner = hWnd; ofnOpenFile.lpstrFilter = ...; // <- Dateifilter ofnOpenFile.lpstrFile = szSelectedFile; ofnOpenFile.nMaxFile = (MAX_PATH * 2) + 1; ofnOpenFile.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT; ofnOpenFile.lpstrTitle = ...; // <- Titel des 'Öffnen-Dialog' // Öffnen-Dialog aufrufen: if(GetOpenFileName(&ofnOpenFile)) { // ??? }Jetzt meine Frage:
Wie kann ich das Ergebnis (szSelectedFile), also den zusammengesetzten Pfad, der
vom Benutzer selektiert wurde, nun so zerlegen, dass ich jeweils den Pfad plus
den Dateinamen bekomme ?Mal ein Beispiel:
In dem Ordner:C:\Beispiel\befinden sich 3 Dateien namens:
info1.txt info2.txt info3.txtMein Ziel:
C:\Beispiel\info1.txt C:\Beispiel\info2.txt C:\Beispiel\info3.txtWär echt super nett, wenn ihr mit da mal n kleines Snippet zu schreiben könntet, da ich schon alles probiert hab und google und Co auch nix ausspuckt ...Danke schonmal!
-
Willst du jetzt einfach nur den Pfad der ausgewählten Datei(en) haben, oder willst du alle Dateien aus einem Verzeichnis auslesen?
1.) z.B. so (in szFilePath steht hier jetzt vorher der komplette Pfad mit Dateiname drin): *(strrchr(szFilePath,'\')+1) = 0;
2.) http://www.c-plusplus.net/forum/viewtopic-var-t-is-39396.html
-
Hi flenders,
flenders schrieb:
Willst du jetzt einfach nur den Pfad der ausgewählten Datei(en) haben, [...]
JA genau. Das ist es!
Aber dein Code unter 1. versteh ich irg wie nicht,...Muss ich den nicht in Schleifen parsen ?
Danke nochmal, für deine Antwort!
-
ofn schrieb:
dein Code unter 1. versteh ich irg wie nicht,...Muss ich den nicht in Schleifen parsen ?
Dort wird einfach der jeweilige String nach dem letzten \ mit einer 0 terminiert (sprich der Dateiname abgeschnitten). Wenn du in szSelectedFile mehrere Dateien drin hast, musst du das für jede Datei machen (wobei die ja alle im selber Verzeichnis liegen und du somit wohl auch immer den selben Pfad bekommen wirst)
-
flenders schrieb:
ofn schrieb:
dein Code unter 1. versteh ich irg wie nicht,...Muss ich den nicht in Schleifen parsen ?
Dort wird einfach der jeweilige String nach dem letzten \ mit einer 0 terminiert (sprich der Dateiname abgeschnitten). Wenn du in szSelectedFile mehrere Dateien drin hast, musst du das für jede Datei machen (wobei die ja alle im selber Verzeichnis liegen und du somit wohl auch immer den selben Pfad bekommen wirst)
Also den Pfad habe ich ja...nur den Pfad mit den Dateinamen zusammenbringen, das funzt irg.wie nit
...
Also so komme ich an den Pfad:const std::string strPathOnly(szSelectedFile, ofnOpenFile.nFileOffset);Denn:
MSDN zu OPENFILENAME schrieb:
The nFileOffset member is the offset, in bytes or characters, to the first filename, and the nFileExtension member is not used.
Hm hier vllt nochmal der ganze Absatz, ich werd daraus irg wie nit schlau(hab das meiner Meinung nach wichtigste mal markiert):
OFN_ALLOWMULTISELECT
Specifies that the File Name list box allows multiple selections. If you also set the OFN_EXPLORER flag, the dialog box uses the Explorer-style user interface; otherwise, it uses the old-style user interface.
If the user selects more than one file, the lpstrFile buffer returns the path to the current directory followed by the filenames of the selected files. The nFileOffset member is the offset, in bytes or characters, to the first filename, and the nFileExtension member is not used. For Explorer-style dialog boxes, the directory and filename strings are NULL separated, with an extra NULL character after the last filename. This format enables the Explorer-style dialogs to return long filenames that include spaces. For old-style dialog boxes, the directory and filename strings are separated by spaces and the function uses short filenames for filenames with spaces. You can use theFindFirstFile function to convert between long and short filenames.If you specify a custom template for an old-style dialog box, the definition of the File Name list box must contain the LBS_EXTENDEDSEL value.
-
Oh, ich hatte irgendwie nicht genau gelesen, was du überhaupt haben wolltest...

Also wenn ich das richtig verstehe, dann hast du nach
szSelectedFile += ofnOpenFile.nFileOffset;in szSelectedFile hintereinander die einzelnen Dateinamen stehen. Also Dateiname, dann kommt (zusätzlich zum Sting-Abschluss-Null-Zeichen) ein zusätzliches Null-Zeichen und dann der nächste. Wenn du an jeden Dateinamen den Pfad drankopieren willst, dann muss du dir das mit lstrcat wieder zusammenkopieren. und nachdem du einen Dateinamen abgearbeitet hast, setzt du einfach so wie ober den szSelectedFile-Zeiger um die Stringlänge+2 weiter...
-
flenders schrieb:
in szSelectedFile hintereinander die einzelnen Dateinamen stehen.
Jo, aber an die komm ich ebend nit ran...

-
dann gib dir mühe
-
Ich bitte noch mal um Hilfe....
@lo:Ich sitz da schon ne Ewigkeit dran und hab alles mögliche probiert (sowohl mit std::strings und deren Methoden, als auch mit C-Strings und den Standard-Funktionen) aber da kam nie das richtige raus...

Nur ein KLEINES Snippet zum parsen
...
-
if(GetOpenFileName(&ofnOpenFile)) { int pos = ofnOpenFile.nFileOffset; TCHAR szFilePath[MAX_PATH+1]; lstrcpy(szFilePath,szSelectedFile); lstrcat(szFilePath,"\\"); while(szSelectedFile[pos] != 0) { lstrcpy(&szFilePath[ofnOpenFile.nFileOffset],&szSelectedFile[pos]); pos += lstrlen(&szSelectedFile[pos])+1; MessageBox(0,szFilePath,"Ausgewählte Datei",0);// ??? } }
-
BOAH, bin baff....MEGA DICKES DANKE!!!!!!!!!!!!
DAS ISSES!!!!!VIELEN,VIELEN,VIELEN,VIELEN,VIELEN,VIELEN,VIELEN,VIELEN,VIELEN,VIELEN DANK!!!