Welche endung??
-
Natürlich das ausgewählte Format (endung)...
an der stelle nach Get?FileName();
-
Schau Dir die Beschreibung der OPENFILENAME Struktur in der MSDN an.
-
Habe ich mir angekuckt:
typedef struct tagOFN { DWORD lStructSize; HWND hwndOwner; HINSTANCE hInstance; LPCTSTR lpstrFilter; LPTSTR lpstrCustomFilter; DWORD nMaxCustFilter; DWORD nFilterIndex; LPTSTR lpstrFile; DWORD nMaxFile; LPTSTR lpstrFileTitle; DWORD nMaxFileTitle; LPCTSTR lpstrInitialDir; LPCTSTR lpstrTitle; DWORD Flags; WORD nFileOffset; WORD nFileExtension; LPCTSTR lpstrDefExt; LPARAM lCustData; LPOFNHOOKPROC lpfnHook; LPCTSTR lpTemplateName; #if (_WIN32_WINNT >= 0x0500) void * pvReserved; DWORD dwReserved; DWORD FlagsEx; #endif // (_WIN32_WINNT >= 0x0500) } OPENFILENAME, *LPOPENFILENAME;Sagt mir nicht sehr viele (Und die Beschreibung noch weniger)
ist das der wert?? (LPCTSTR lpstrFilter;)
-
RedEagle schrieb:
Sagt mir nicht sehr viele (Und die Beschreibung noch weniger)
Dann solltest Du Dir evtl. überlegen, ob Windows-Programmierung wirklich das Wahre für Dich ist, wenn Du schon nicht durch die Dokumentation steigst...
Wenn...
- in lpstrDefExt etwas steht UND der User KEINE Endung angegeben hat, dann steht in lpstrFileTitle (ohne Pfad) oder lpstrFile (mit Pfad) die Endung mit drin.- der User hingegen einen punkt als Endung angegeben hat, dann hat die Datei keine Endung.
In nFileExtension steht die Anzahl an Bytes, bei der die Dateiendung in lpstrFile anfängt. Z. B. bei c:\dir1\dir2\file.ext wäre das der Wert 18.
-
Ich bin erst 17, d.H. ich habe 6 Jahre englisch auf einer REALschule gehabt, und das bei lehrern, die es selber nicht konnten...
-
Was willst Du denn auch mit der Endung allein?
PS: hatte auch nur 6 Jahre Englisch, Abschluß Realschule, bin mittlerweile 34 Jahre alt... also entsprechend lange aus der Schule. Ohne MSDN wird das mit Windows-Programmierung nix...
-
if (endung == txt) {/**/} else if (endung == exe) {/**/} //...oder wie soll man sonst in unterschiedlichen formaten speichern??
Hepi schrieb:
Wenn...
- in lpstrDefExt etwas steht UND der User KEINE Endung angegeben hat, dann steht in lpstrFileTitle (ohne Pfad) oder lpstrFile (mit Pfad) die Endung mit drin.- der User hingegen einen punkt als Endung angegeben hat, dann hat die Datei keine Endung.
In nFileExtension steht die Anzahl an Bytes, bei der die Dateiendung in lpstrFile anfängt. Z. B. bei c:\dir1\dir2\file.ext wäre das der Wert 18.
mit anderen worten, ich muss die ENdung selbts ermitteln??
-
Evtl. hilft Dir dabei die Funktion PathFindExtension...
-
msdn schrieb:
Syntax
LPTSTR PathFindExtension(
LPCTSTR pPath
);Parameters
pPath
[in] Pointer to a null-terminated string of maximum length MAX_PATH that contains the path that contains the extension for which to search.Return Value
Returns the address of the "." preceding the extension within pPath if an extension is found, or the address of the trailing NULL character otherwise.Function Information
Minimum DLL Version shlwapi.dll version 4.71 or later
Custom Implementation No
Header shlwapi.h
Import library shlwapi.lib
Minimum operating systems Windows 2000, Windows NT 4.0 with Internet Explorer 4.0, Windows 98, Windows 95 with Internet Explorer 4.0
Unicode Implemented as ANSI and Unicode versions.die Funktion habe ich verstande. muss ich jetzt die dll "shlwapi.dll" einbinden?? UND die lib UND den header?? und was hat das mit dme IE zu tun??
-
Header einbinden, Lib verlinken.
Der Internet Explodierer 4 liefert die DLL, wenn man Windows NT 4/95/98 benutzt. Das bedeutet: Wer Dein Programm dann mal unter Windows NT 4/95/98 benutzen will, der muß mindestens den Internet Explodierer 4 installiert haben (denn Dein Programm benötigt die shlwapi.dll version 4.71 or later). Alle anderen Betriebssysteme haben das Problem nicht, da sie eine neuere Version der DLL haben.
-
ok, danke
-
also ich lern' jetzt seit ca. 4 Jahren Englisch - und hab bis jetzt alles
geschafft, was ich programmieren wollte.. Mit oder ohne MSDN und c-plusplus.net/forum
-
Ich möchte ja nicht, das es einfach nur Funktioniert, ich möchte auch verstehen, wie es funktioniert, um es meinem Code anzupassen, und auch später, in anderen situationen wieder verwenden zu können. Und da reicht mir keine Beschreibung, die ich nur zur Hälfte verstehe.
Und ich habe beisher auch alles geschafft, was ich machen wollte.
Und ich habe auch Probleme mit DER Funktion gehabt, weil der irgendwie Probleme mit dem Header hatte, darum habe ich mir die Funktion jetzt selber geschrieben.
Ist zwar noch nicht Perfektioniert, bringt aber schon gute Ergebnisse:
string GetFileType(char* pathx, int max_path) { char path[max_path]; strcpy(path,pathx); char endung[10]; int stelle=0; for(int i=0; i!=max_path; i++) //char durchlaufen { if(path[i] == 46) //wenn punkt (d.h. die Endung beginnt { for(int j=i++; j!=max_path; j++) //endung durchlaufen { endung[stelle] = path[j]; //ein Zeichen der endung kopieren stelle++; //Die stelle in der die endung gespeichetr wird if(path[j] == 0) //wenn endung zuende { //MessageBox(NULL,endung,"die endung",NULL); return endung; } }//for }//if }//for return ""; }
-
Geht auch schneller:
string filename = "/home/foo/datei.txt"; cout << filename.substr(filename.find('.')+1);oder
char* filename = "/home/foo/datei.jpeg"; cout << strstr(filename, ".")+1 << endl;
-
So ich grab das ma gerade aus...
Ich habe das selbe Problem -galub ich- is alles bischen wirr hier..
void save( void ) { OPENFILENAME myOpenDlg = { 0 }; char openFile[300] = { 0 }; //filepath (returned by OPENDIALOG) myOpenDlg.lStructSize = sizeof(OPENFILENAME); myOpenDlg.hwndOwner = myAppWnd; //als childwindow erzeugen myOpenDlg.lpstrFilter = "Datei\0*.iFile\0Datei in TXT Konvertieren\0*.txt\0\0"; myOpenDlg.nFilterIndex = 1; //standardwahl myOpenDlg.lpstrFile = openFile;//char* zum erhalten des Dateipfades myOpenDlg.nMaxFile = 300;//max laenge des Dateipfades myOpenDlg.lpstrTitle = "Speichern einer Datei"; myOpenDlg.Flags = OFN_FILEMUSTEXIST; //die Datei muss existieren GetSaveFileName( &myOpenDlg ); printf( "%s\n", openFile ); }Geht super.. nur bekomme ich bei "printf" nuc...
C:\Testpfad1\fileund nicht
C:\Testpfad1\file.#gefählteEXT#Wie weiß ich nun ober der user .txt oder .iFile speichern will?
-
Also
lpstrDefExt Pointer to a buffer that contains the default extension. GetOpenFileName and GetSaveFileName append this extension to the file name if the user fails to type an extension. This string can be any length, but only the first three characters are appended. The string should not contain a period (.). If this member is NULL and the user fails to type an extension, no extension is appended.das ist ja gut und schön, aber wozu ist dann noch:
"Dateityp" in dem SaveDLG?Ich möchte wissen was da gewählt wurde... Bitte helft mir, kann ja ncith soo schwer sein oder?