name herausfinden der ausgeführten anwendung
-
hallo,
ich suche eine funktion bzw. ein vordefinierte variable , die den namen der anwendung enthält ...d.h.
ich führe eine anwendung aus und dort steht unter welchen namen sie ausgeführt wurde...ich hoffe ihr versteht was ich meine

also das programm muss wissen können ob es test.exe heißt oder anwenung.exe!!

ich brauch keinen kompletten sourcecode nur die function/variable etc.
tibolus
-
argv[0] enthält den Pfad zur Anwendung, daraus kannst du den Dateinamen herausschneiden.
-
und wie ?

-
Tibolus schrieb:
und wie ?

Indem du mit strchr, oder besser find() oder auch einer Stringfunktion nach dem letzten / suchst? oO
-
-
und wie schneide ich das jetzt?
da brauch ich doch einmal die source
-
Tibolus schrieb:
und wie schneide ich das jetzt?
da brauch ich doch einmal die source
mach einfach sowas in der Art
std::string verz(argv[0]); std::string dateiname = verz.substr(verz.rfind('\\') + 1, verz.length() - verz.rfind('\\'));ungetestet und mehr oder weniger unsicher!
-
Mit strrchr suchst du nach dem letzten '\' in argv[0]
strrchr (mit 2 r)Wenn ein \ gefunden wurde, findest du ein Zeichen weiter den Dateinamen.
-
DirkB schrieb:
Mit strrchr suchst du nach dem letzten '\' in argv[0]
strrchr (mit 2 r)Wenn ein \ gefunden wurde, findest du ein Zeichen weiter den Dateinamen.
Wir sind im C++-, nicht im C-Forum. Diese Lösung ist praktisch unnötig C-reich, und um Performance geht es hier nicht.
Edit: Obwohl...
char dateiname[256]; strcpy(dateiname, strrchr(argv[0], '\\') + 1);
-
char* ptr(strrchr(argv[0], '\\') + 1) std::string dateiname(ptr, strlen(ptr));Geht auch. Oder noch einfacher (am einfachsten):
std::string dateiname(strrchr(argv[0], '\\') + 1);
-
Nachdem man sowieso einfach nur den letzten Teil such, braucht man eigentlich nix kopieren

-
dot schrieb:
Nachdem man sowieso einfach nur den letzten Teil such, braucht man eigentlich nix kopieren

Ja, siehe meinen letzten Post.

Edit: Jah, 900! Bald sind's tausend.

-
@hacker @hacker

thx it work!
-
Tibolus schrieb:
@hacker ...
ehm geht das auchnoch irgentwie wenn ich das in einer char variable kommt ?
sonst kann ich damit nicht arbeiten

std::string dateiname(strrchr(argv[0], '\\') + 1);WTF heißt wenn ich das in einer char variable kommt ?? Meinst du, wenn es als C-String kommt, also wie argv[0]? Bitte deutlich schreiben! Das geht so nicht.
-
@hacker

egal
diese methode work 1a

char dateiname[256];
strcpy(dateiname, strrchr(argv[0], '\') + 1);danke
gelöst
-
Hacker schrieb:
Wir sind im C++-, nicht im C-Forum. Diese Lösung ist praktisch unnötig C-reich, und um Performance geht es hier nicht.
Wozu dieser riesige Umweg? An strrchr ist nix gefährliches, wenn man einen þultigen C-String hat (und es ist hier standardgegeben ein gültiger C-String). Wir brauchen auch nix zu kopieren (wie in einer deiner Lösungen).
Da:
if (argc > 0) // Eine Umgebung _muss_ nicht unbedingt den Namen übergeben { char *progname = strrchr(argv[0], '/'); if (progname) ++progname; // Ein Zeichen weiter ist der Programmname else progname = argv[0]; // Kein '/' gefunden, Programm wurde ohne Pfadangabe aufgerufen // progname ist nun ein gültiger C-String mit dem Programmnamen }
-
SeppJ schrieb:
// Eine Umgebung _muss_ nicht unbedingt den Namen übergeben [...] // Ein Zeichen weiter ist der ProgrammnameDas erste Argument _muss_ nicht unbedingt der Programmname sein.
-
proggebber schrieb:
Das erste Argument _muss_ nicht unbedingt der Programmname sein.
Es ist, nach Standard, wenn es existiert, der Aufrufname oder "". Mein Programm deckt beides ab.
-
Im Standard steht nur was von "sollte".
-
Nö, im Standard steht genau das was SeppJ sagt (shall bedeutet im Standard muss).
Was SeppJ vergessen hat ist, dass Pfade unter Windows '\' oder '/' enthalten können.