Verzeichnis als string-Variable
-
Moin Leute,
Ich habe ein kleines Problem: Ich bräuchte eine Funktion, welche mir sagt, in welchem Verzeichnis sich mein Programm gerade befindet und diese Daten in eine string-Variable übergibt, also in etwa so etwas:#include "stdafx.h" #include <string> #include <iostream> using namespace std; void _tmain(void) { string sVerzeichnis; sVerzeichnis = gesuchteFunktion(); cout << " Die .exe-Datei dieses Programmes hat den Pfad " << sVerzeichnis" << endl; system("pause"); exit(0); }
Die Funktion kann auch ruhig etwas anders aussehen, Hauptsache ist, dass in sVerzeichnis das Verzeichnis der .exe steht.
Der Idealfall wäre, dass sVerzeichnis den Wert "C:\\Programme\\Anwendung\\Anwendung.exe" hat.
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Ich vermute mal, was du suchst ist das hier: http://msdn.microsoft.com/en-us/library/windows/desktop/ms683197.aspx
-
Das sieht schon mal sehr vielversprechend aus!
aber wie kriege ich das in eine String-Variable rein?
-
So in der Art:
#include <iostream> #include <string> #include <windows.h> using namespace std; int main() { char buff[MAX_PATH]; if (GetModuleFileName(nullptr, buff, MAX_PATH)) { string filename = buff; cout << "Pfad: " << filename << endl; } return 0; }
-
Also bei mir spuckt er den Fehler "error C2065: 'nullptr': nichtdeklarierter Bezeichner" aus.
-
Dann mach 0 draus, dein Compiler unterstützt nullptr offenbar noch nicht...
-
Habe ich auch schon versucht. Dann spuckte er "error C2664: 'GetModuleFileNameW': Konvertierung des Parameters 2 von 'char [260]' in 'LPWCH' nicht möglich" aus.
P.S. Ich benutze Microsoft Visual C++ 2008 Expess Edition.
-
Benutz GetModuleFileNameA().
-
Danke! Es funktioniert!
-
Aber verstanden warum, hast Du nicht...
-
Bezüglich A und W Versionen der WinAPI Funktionen:
Mann sollte die A oder W Version nicht direkt benutzen, sondern die ohne Postfix. Es kann zu Problemen führen, wenn die Version der Funktion (A oder W) und das eingestellte Characterset nicht zusammenpassen.Folgende Optionen stehen zur Verfügung:
- Entweder generischer Code schreiben mit TCHAR etc.
- Oder Characterset entsprechend einstellen (beim Projekt)
- Oder an geigneter Stelle eine Konvertierung vornehmen (mit MultiByteToWideChar(..) bzw. WideCharToMultiByte(..) oder ähnlichen Funktionen).Simon