Dateiöffnen mit CFile ohne Pfadangabe?

Olaf Lehmann

Mitglied
Danke bei der Gelegenheit nocmal an MCoder für die Aufklärung wegen meiner schwarzen Linien.

Hier ein anderes kleines Problemchen von mir:
In normalem C++ kann ich schreiben:
C++:
ifstream Quelle;               //ini-Datei öffnen
Quelle.open("C:\\Programme\\Telemetry\\GPL_BestLap.ini" , ios_base::in);
oder in Zeile 2 kann ich auch schreiben:
C++:
Quelle.open("GPL_BestLap.ini" , ios_base::in);
Im zweiten Fall sucht das Programm die ini-Datei in dem Ordner, in dem sich die exe-Datei befindet. Das hat den Vorteil, dass mein Programm die .ini immer findet, solange sie im gleichen Ordner wie das Programm bleibt.

In Windows mit MFC (übrigens Visual C++6.0) verwende ich CFile:
C++:
CString Pfad="C:\\Programme\\Telemetry\\GPL_Log.ini";  
CFile Quelle(Pfad  , CFile::modeRead );
Wenn ich nun schreibe:
C++:
CString Pfad="GPL_Log.ini";
findet das Programm die .ini nicht. Wenn ich die obere Zeile verwende, bedeutet das für den Anwender, dass er die .ini und damit praktisch auch das Programm an einen ganz bestimmten Ordner legen muss. Das wirkt natürlich ein bisschen autoritär oder so.

Also, meine Frage wie kriege ich CFile dazu die .ini im gleichen Ordner, in dem die Programm.exe liegt zu suchen?

MfG
Olaf
 
Zuletzt bearbeitet:

MCoder

Erfahrenes Mitglied
Danke bei der Gelegenheit nocmal an MCoder für die Aufklärung wegen meiner schwarzen Linien.
Danke für die themenübergreifende Erwähnung :)
Wenn die Antwort passt, kannst du das betreffende Thema ja auf "erledigt" setzen.
Im zweiten Fall sucht das Programm die ini-Datei in dem Ordner, in dem sich die exe-Datei befindet.
Das ist so nicht ganz richtig; es wird im aktuellen Pfad gesucht, der allerdings nicht immer mit dem Speicherort des Programms übereinstimmen muss. Es ist daher sehr empfehlenswert, immer den vollständigen Pfad anzugeben. Bei Windows kannst du den Speicherort der EXE mit Hilfe der API-Funktion "GetModuleFileName()" ermittelt. Das Thema wurde hier im Forum schon behandelt, also einfach mal suchen.

Gruß
MCoder
 

langer1801

Erfahrenes Mitglied
Hi,

die folgende Funktion gibt dir den Pfad zurück. Dann mußt du nur noch den Datei-Namen anhängen
Code:
CString CMainFrm::GetFilePath()
{
	char buffer[_MAX_PATH];
	::GetModuleFileName (NULL, buffer, _MAX_PATH);
	return CString(buffer).Left(CString(buffer).ReverseFind('\\')+1);
}

Bei Unicode müßtest du TCHAR verwenden.

Mfg

langer