Abrufen des Dateinamens der aktuell ausgeführten ausführbaren Datei in C ++

7

Ich möchte den vollständigen Pfad des aktuellen Prozesses erhalten.

Ich verwende _getcwd , um das aktuelle Arbeitsverzeichnis zu erhalten. Aber es enthält keinen Dateinamen.

Wie kann ich den Dateinamen wie folgt erhalten: filename.exe ?

    
Phat Tran 03.09.2012, 23:16
quelle

7 Antworten

5

Unter Windows können Sie Folgendes verwenden:

%Vor%

szExeFileName enthält den vollständigen Pfad + den ausführbaren Namen

[Bearbeiten]

Für eine portabelere Lösung verwenden Sie argv[0] oder einen anderen plattformspezifischen Code. Einen solchen Ansatz finden Sie hier: Ссылка .

    
marcinj 04.09.2012, 00:17
quelle
14

argv[0] Ihrer Hauptfunktion ist Ihr Dateiname.

Ein einfaches Code-Snippet:

%Vor%     
Seçkin Savaşçı 03.09.2012 23:18
quelle
7

Unter Linux ist der Dateiname Ihrer Binärdatei das Ziel eines Symlinks bei /proc/self/exe . Sie können den Systemaufruf readlink verwenden, um das Ziel eines Symlinks zu finden.

Beachten Sie, dass dies den tatsächlichen Speicherort auf der Festplatte angibt, auf dem die Binärdatei gespeichert ist, nicht nur der Befehl, mit dem der Benutzer Ihr Programm gestartet hat.

    
Ken Bloom 03.09.2012 23:40
quelle
1

Sie können den Namen der ausführbaren Datei normalerweise von argv[0] :

abrufen %Vor%

Tatsächlich gibt es Möglichkeiten für eine Anwendung auf execl() eine andere Anwendung (oder eine andere ähnliche Funktion) und überschreiben dieses Argument. Es ist immer noch unkonventionell, das System für diese Art von Anwendung zu ändern.

    
E_net4 03.09.2012 23:19
quelle
1

Wie bereits erwähnt, ist der Name Ihrer ausführbaren Datei in argv [0] enthalten. Wenn Sie das brauchen, könnten Sie:

%Vor%

Wenn Sie den Namen einer Quelldatei der ausführbaren Datei benötigen, hat C ++ ein vordefiniertes Makro, das Sie verwenden können:

%Vor%

Gehen Sie zu und scrollen Sie zu "Vordefinierte Makronamen"

    
user6866749 02.02.2017 04:51
quelle
1

Sie können programm_invocation_name von errno.h

verwenden

Ссылка

    
vromanov 28.06.2017 11:27
quelle
0

In Linux (POSIX?) gibt es eine Umgebungsvariable namens _ , die den aktuellen Prozess enthält.

%Vor%

In C ++

%Vor%

kompilieren

%Vor%

druckt ./a.out (oder was auch immer die ausgeführte Zeile ist, einschließlich Pfad).

Dies hat gewisse Vorteile gegenüber den anderen Ansätzen, es kann global gelesen werden (nicht übergeben argv[0] ) und benötigt keine Dateibehandlung.

    
alfC 29.04.2016 21:51
quelle

Tags und Links