CFileDialog - Exception
-
Hallo
In meinem Programm erzeuge ich mit "CFileDialog" ein Standard-Dialog um Dateien zu öffnen. Dies funktioniert eigentlich auch und ich kann problemlos eine Datei auswählen und auf OK klicken und der Name der Datei wird auch eingelesen. Sobald ich aber im Open-Dialog auf "Abbrechen" klicke tritt folgende Exception auf:
*Debug Assertion Failed!
Program: ...k\Development\Projekte\Datensammler\WinDebug\Datensammler.exe
File: fopen.c
Line: 54Expression: *file != _T('\0')
For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.(Press Retry to debug the application)*
hier mein Code:
CString CDatensammlerDlg::GetCfgFileName() { CString fileName = ""; static char BASED_CODE szFilter[] = "Konfigurationsdateien (*.cfg)|*.cfg|Alle Dateien (*.*)|*.*||"; CFileDialog fd_OpenCfg(true, ".cfg", NULL, NULL, szFilter); if (fd_OpenCfg.DoModal() == IDOK) { fileName = fd_OpenCfg.GetPathName(); } return fileName; }
Kann mir einer sagen warum hier eine Exception auftritt ? bzw. was muss ich tun um das zu verhindern ?
(Ich benutze Visual C++ 6)
-
Expression: *file != _T('\0')
Heißt, es wurde kein Dateiname angegeben.
Drück beim ASSERT mal Wiederholen (Retry) und schau im Callstack nach, wo du stehst.
-
Expression: *file != _T('\0')
return fileName;
Dir fehlt die ende-null im CString. Daher beschwert er sich wenn du den nicht abgeschlossenen String im fehlerfall zurück gibst.
Intitialisiere den CString:
CString fileName.SetString("");
am beginn, dann sollte die exception nicht mehr auftreten.
-
@codeman
hmm also den String "fileName" habe ich ja eigentlich bereits initialisiert und ausserdem geht es nicht so wie du geschrieben hast mit der Methode "SetString"... Also für den Typ "CString" gibt es auch keine Methode mit dem Namen "SetString"@estartu_de
Im CallStack wird bei mir folgende (aktuelle) Zeile angezeigt:_fsopen(const char * 0x003958cc, const char * 0x00570398 `string', int 64) line 54 + 39 bytes
Allerdings kann ich damit nicht viel anfangen...
-
Vielen Dank für eure Hilfe, jetzt funktioniert es endlich ohne Exception:
if (fd_OpenCfg.DoModal() == IDOK) { fileName fd_OpenCfg.GetPathName(); } else { return ""; } return fileName;