K
Um meine Frage nach einem Tag warten,suchen und verzweifeln selber zu beantworten schreibe ich diesen Beitrag um vielleicht auch anderen zu helfen.
Will man als MFC-Programmierer eine Datei öffnen die relativ zur Anwendungs-EXE steht kann man ja normalerweise einfach
CStdioFile file ("hallo/Test/Links.cfg", CFile::typeText);
verwenden
Wenn man aber den CFileDialog benutz ändert sich der relative Pfad auf einmal, dass bedeuted hallo/Test/Links.cfg ist jetzt nicht mehr der Pfad, der nach der exe folgt sondern der Pfad der in der neu geöffneten Datei steht:
c://hallo/anwendung.exe
mit "hallo/Test/Links.cfg" : c://hallo/hallo/Test/Links.cfg
c://test/datei.txt -> wird geöffnet
mit "hallo/Test/Links.cfg" : c://test/hallo/Test/Links.cfg
und so passiert es, dass die Datei nicht mehr existiert.
Dieses Problem kann man aber nicht mit dieser Funktion umgehen:
char strDir[1024];
GetCurrentDirectory(1024,strDir);
denn da kommt der gleiche Pfad, in der die geöffnete Datei steht
Lösung:
Bevor man den FileDialog benutz holt man sich den Dateipfad mit GetCurrentDirectory und wenn man fertig ist mit dem FileDialog benutz man SetCurrentDirectory und alle Pfadangaben stimmen wieder:
char strDir[1024];
GetCurrentDirectory(1024,strDir);
//FileDialog
static char BASED_CODE szFilter[] = "|Alle Dateien (*.*)|*.*||";
CFileDialog m_FileDialog(true,0,0,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter,0,0);
if( m_FileDialog.DoModal()==IDOK )
{
}
//FileDialog Ende
SetCurrentDirectory(strDir);
ich hoffe ich konnte auch anderen leid geplagten seelen helfen, die genauso wie ich fast verzweifelt sind.