Programmpfad extrahieren
-
Wieso kann ich nicht davon ausgehen, dass da ein Pfad drinnen steht? Was is denn das fürn Mist!? (Das Programm soll vorerst unter Windows laufen)In C muss man anscheinend nicht nur das Fahrrad neu erfinden, sondern das Rad ansich...

Gibts denn keine fertige Funktion für sowas...?
-
Hallo
In C muss man anscheinend nicht nur das Fahrrad neu erfinden, sondern das Rad ansich...
Gibts denn keine fertige Funktion für sowas...?Deshalb sollst du ja auch C++ verwenden.
Mit std::string ist das ein zweizeiler, da du nur nach nem Backslash suchen mußt.
Kannst dir also deine Funktion selber bauen.bis bald
akari
-
Den Pfad des Programms zu ermitteln ist mit Standard C bzw. C++ nicht möglich. Du musst dann die WinAPI benutzen (GetModuleFileName).
-
Öhm sorry das ich da undeutlich war...Ich arbeite natürlich mit C++ (das is für mich als Delphifritzen das selbe...
)Hmmm...kannst du mir den 2Zeiler mal zeigen... Bevor ich die halbe Nacht an so ner Lapalie hänge...

-
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