Programmpfad extrahieren
-
In Delphi kannste dich auch nicht darauf verlassen! Es kommt drauf an wie das Programm aufgerufen wird. Gehst du über die Konsole in das Programmverzeichnis und startest dann die EXE steht nur der Name der EXE in argv[0].
-
Unter welchen umständen enthält argv[0] denn keine Pfadangabe? Eventuell kann ich das ausschließen...
-
Hallo
Unsinn.
#include <iostream> int main(int argc, char* argv[]) { std::cout << argv[0] << std::endl; system("pause"); return 0; }gibt mir unter Windows den komplett Pfad aus.
bis bald
akari
-
Wie wärsn mit
char *path = argv[0]; char *end = path+strlen(path)-1; // ende des strings while (--end != '\\' && end > path) // den letzten \ suchen continue; end = 0; // neues string ende definierenAlternativ sollte man vllt statt argv[0] die Funktion GetModuleFileName(NULL, lpStr, MAX_PATH) nehmen (vorher halt char lpStr[MAX_PATH]).
-
str.substr(str.rfind('\\') + 1);
-
akari starte das Programm aus der Konsole und du wirst sehen das es kein Unsinn ist was ich geschrieben hab.
-
Danke für die Antworten. Vorallem letztere Lösung is mir symphatisch (weil kurz
)@hahaha... : Möchte mal wissen woher du deine Aussagen beziehst... Ich hab das mit Delphi gerade getestet und egal von wo ich das aufrufe überall grig ich den Pfad. Schätze das ist in C dann genauso. Das sind wohl gerüchte aus DOS Zeiten...
-
kann sein das delphi da noch was anderes macht im hintergrund. (hab kein delphi)
aber ich habe gerade akari's programm ausprobiert und es gibt nicht den vollständigen pfad aus wenn man es aus der konsole raus startet.
-
Hallo
@ hahahahahahhaha
also bei mir (Win2000, BCB5) wird auch beim Ausruf der Konsole der vollständige Pfad angezeigt.D:\SoftDev\Test\Pathtest>project1.exe D:\SoftDev\Test\Pathtest\Project1.exe Drücken Sie eine beliebige Taste . . . D:\SoftDev\Test\Pathtest>cd.. D:\SoftDev\Test>pathtest\project1.exe D:\SoftDev\Test\pathtest\Project1.exe Drücken Sie eine beliebige Taste . . .bis bald
akari
-
Ich hab das gerade getestet und muss hahahaha da recht geben... Seltsam... anscheinend ruft delphi selbständig die Windowsapi auf...
EDIT: Windows XP + GCC
-
ok dann liegt es wohl daran das ich windows xp und visual c++ benutze.

also macht was ihr wollt, aber verlasst euch nicht drauf.
-
@hahahah: Wie sieht dein Standardcode für diesen Fall aus?
-
akari, wechsel erstmal mit "cd" ins verzeichnis SoftDev\Test\Pathtest und ruf dann project1.exe auf.
mein screenshot: http://putfile.com/pic.php?pic=10/27815580132.png&s=x7
-
Hallo
ich hab meine Ausgabe bereits in meinen vorherigen Post editiert.
bis bald
akari
-
#include <windows.h> #include <iostream> #include <string> int main() { TCHAR fullPath[MAX_PATH]; GetModuleFileName(NULL, fullPath, MAX_PATH); std::string str(fullPath); std::cout << str.substr(0, str.rfind('\\') + 1) << std::endl; }
-
Danke...das könnte funktioniere...
Ich arbeite mit SDL und musste gerade feststellen, dass es wohl selbst dort keine Plattformunabhängige Methode gibt... Ich find das ziemlich be******en.

Danke euch
-
das hätte in der SDL auch nix zu suchen.
-
Das seh ich anders. SDL bietet ja mit RWops auch Filehandler an. Damit zeigt man ja quasi, das man mit Filesystemen arbeiten kann. Wieso also nicht sowas mit anbietet?
SDL soll ja die Plattform für X-Plattform entwicklung sein. Da gehören nunmal solche sachen mit dazu...
-
Ich hatte schon mal in einem anderen Thread, wo du das gleiche Problem hattest, empfohlen boost::filesystem zu benutzen. Das wäre ein Einzeiler!!! Aber wer nicht hört, muß fühlen!

-
Wie heißt denn die richtige Funktion von boost::filesystem die diese Aufgabe erledigt? Ist das initial_path oder meinst du eine andere?