Datei im Verzeichnis des Executables öffnen
-
Ich dachte, argv ist ein char**?
Also ist
argv[x] <=> *(argv + x)
-
Hacker schrieb:
Ich dachte, argv ist ein char**?
Also ist
argv[x] <=> *(argv + x)Genau. Und wo findest du hier einen Konstruktor für char **?
-
wxSkip schrieb:
Hacker schrieb:
Ich dachte, argv ist ein char**?
Also ist
argv[x] <=> *(argv + x)Genau. Und wo findest du hier einen Konstruktor für char **?
Jaja, du hast ja recht. Editiert!
-
Wat is s?
-
Der Standard garantiert nichtmal dass es sowas wie Verzeichnisse überhaupt gibt.
Einen wirklich plattformunabhängigen Weg kanns daher also rein prinzipiell schon nicht geben.
Hier vielleicht ein hilfreiches Posting: http://stackoverflow.com/a/1024937
-
Wenn es auf dem System keine Verzeichnisse gibt, hat das Programm auch keinen Sinn mehr.
-
Naja, dann nimm eben am einfachsten argv[0] oder implementier dir eben eine Funktion für jedes System das du unterstützen willst. So kompliziert ist das dann doch auch wieder nicht...
-
dot schrieb:
Naja, dann nimm eben am einfachsten argv[0] oder implementier dir eben eine Funktion für jedes System das du unterstützen willst. So kompliziert ist das dann doch auch wieder nicht...
Womit man wieder auf meinen Weg geht, oder gleich sowas:
std::string GetProgrammDirectory() { #ifdef _Windows // WINAPI-Code #elif __unix__ || __unix //POSIX-konformer Code #elif __OS2__ // Für OS2 (was für eine Überraschung) #else // Code mit Standard-C++ Filestreams als Alternative #endif }Edit: Nur ein Beispiel! Mir ist klar, dass das da oben sinnlos ist.
-
Könnt ihr bitte mal aufhören, trivialen Mist mit argv[0] vorzuschlagen? Der OP hat bereits im ersten Post gezeigt, dass er mit boost und argv[0] nicht so recht weiterkam. Einige bekleckern sich hier nicht gerade mit Ruhm.
Hobo schrieb:
Wenn es auf dem System keine Verzeichnisse gibt, hat das Programm auch keinen Sinn mehr.
Die Argumentation war, dass der Standard keine Verzeichnisse kennt und daher nicht helfen kann. Inwiefern hilft dir dann die Feststellung, dass das Programm auf Systemen ohne Verzeichnisse keinen Sinn macht?
-
Michael E. schrieb:
Könnt ihr bitte mal aufhören, trivialen Mist mit argv[0] vorzuschlagen?
Das denke ich auch, ifdefs sind die einzige Möglichkeit und bei jedem mir bekannten OS als jeweils ~Dreizeiler zu implementieren.
-
Thorgrim schrieb:
Michael E. schrieb:
Könnt ihr bitte mal aufhören, trivialen Mist mit argv[0] vorzuschlagen?
Das denke ich auch, ifdefs sind die einzige Möglichkeit und bei jedem mir bekannten OS als jeweils ~Dreizeiler zu implementieren.
Dankeschön!

-
Michael E. schrieb:
Könnt ihr bitte mal aufhören, trivialen Mist mit argv[0] vorzuschlagen? Der OP hat bereits im ersten Post gezeigt, dass er mit boost und argv[0] nicht so recht weiterkam. Einige bekleckern sich hier nicht gerade mit Ruhm.
Vielleicht macht der OP das ja nicht richtig, was ein guter Grund wäre, diese trivialen Ansätze nicht gleich zu verwerfen, sondern ihm einige Hilfestellungen hinsichtlich dieser zu geben.
Hobo schrieb:
Wenn es auf dem System keine Verzeichnisse gibt, hat das Programm auch keinen Sinn mehr.
Die Argumentation war, dass der Standard keine Verzeichnisse kennt und daher nicht helfen kann. Inwiefern hilft dir dann die Feststellung, dass das Programm auf Systemen ohne Verzeichnisse keinen Sinn macht?
Die Feststelung hilft mir, und ich hoffe auch anderen :), insofern, dass der Sinn des Programms ist,
eine Datei (deren Name ich kenne) im Verzeichnis der ausfühbaren Datei zu öffnen.
Auf einem System, das keine Verzeichnisse kennt, hat das Programm also keinen Sinn.
Insofern müssen Verzeichnisse garantiert sein, wenn nicht durch den Standard, dann durch das System.
-
-
Hobo schrieb:
Vielleicht macht der OP das ja nicht richtig, was ein guter Grund wäre, diese trivialen Ansätze nicht gleich zu verwerfen, sondern ihm einige Hilfestellungen hinsichtlich dieser zu geben.
Lass mal sehen.
"Hi" meint, einfach nur den Dateinamen anzugeben -> Quatsch.
Thuruk zeigt, wie man eine Datei öffnet, von der man den Pfad kennt.
Hacker sagt, dass es sowas Tolles wie die Standardfilestreams gibt und dass man als relativen Pfad lediglich den Dateinamen anzugeben braucht -> Quatsch.
Du kommst mit dem aktuellen Working Directory -> Quatsch.
Hacker kommt mit einem Standard-Zitat zu argv[0] und leitet daraus (oder besser gesagt völlig zusammenhangslos) unbrauchbaren Code her.
Daraufhin ist sich Hacker noch sicher, dass in argv[0] doch eigentlich der Pfad des Programms steht und dass Verknüpfungen eigentlich nur Programme sind, die andere Programme aufrufen (Hinweis an Hacker: Ausprobieren schadet nicht).Tolle Hilfe.
Insofern müssen Verzeichnisse garantiert sein, wenn nicht durch den Standard, dann durch das System.
Ich wiederhole meine Frage: Was bringt dir das?
-
Michael E. schrieb:
Ich wiederhole meine Frage: Was bringt dir das?
Was bringen uns Gabeln? Bescheuerte Frage.
-
Hacker schrieb:
Was bringen uns Gabeln? Bescheuerte Frage.
Gabeln wurden in diesem Thread aber auch noch nicht erwähnt, vor allem nicht nach der Feststellung, dass Gabeln nicht überall auf der Welt verwendet werden.
-
Mal vom Essbesteck der jeweiligen Kultur abgesehen: Warum genau musst du denn auf eine Datei im Verzeichnis des Executeable zugreifen? Warum reicht ein Pfad relativ zum Working Directory nicht aus? Um was genau für eine Datei handelt es sich da denn?
-
Michael E. schrieb:
Hobo schrieb:
Vielleicht macht der OP das ja nicht richtig, was ein guter Grund wäre, diese trivialen Ansätze nicht gleich zu verwerfen, sondern ihm einige Hilfestellungen hinsichtlich dieser zu geben.
Lass mal sehen.
"Hi" meint, einfach nur den Dateinamen anzugeben -> Quatsch.
Thuruk zeigt, wie man eine Datei öffnet, von der man den Pfad kennt.
Hacker sagt, dass es sowas Tolles wie die Standardfilestreams gibt und dass man als relativen Pfad lediglich den Dateinamen anzugeben braucht -> Quatsch.
Du kommst mit dem aktuellen Working Directory -> Quatsch.
Hacker kommt mit einem Standard-Zitat zu argv[0] und leitet daraus (oder besser gesagt völlig zusammenhangslos) unbrauchbaren Code her.
Daraufhin ist sich Hacker noch sicher, dass in argv[0] doch eigentlich der Pfad des Programms steht und dass Verknüpfungen eigentlich nur Programme sind, die andere Programme aufrufen (Hinweis an Hacker: Ausprobieren schadet nicht).Tolle Hilfe.
Hinsichtlich der Verknüpfungen hast Du völlig Recht. Das Programm wäre eben darauf angewiesen, dass das Arbeitsverzeichnis in der Verknüpfung richtig gesetzt ist, oder es funktioniert halt nicht mit Verknüpfungen.
Das Programm wird nunmal von einem beliebigen System ausgeführt, und das kann im Prinzip alles bedeuten: Es kann sogar bedeuten, dass es auf der Festplatte durch einen Taschenrechner mit einem anderen Namen ersetzt wird, bis es beendet ist.
Ohne die Hilfe des Systems ist die Wünschung, dass das Programm den Pfad zu der ausführbaren Datei, aus der es gestartet wurde, errät, abwegig.
Ein paar Wege, die man hier gehen kann, sind z.B.
- Plattformspezifisch einen Installer Dinge wie Pfad des Programms in die Registry oder einen vergleichbaren Ort schieben lassen.
- Die Datei mit ins Programm schieben, und bei Ausführung auspacken, z. B. in den Arbeitsspeicher und von da auslesen
- Wenn die Datei von woanders als von dem Programm kommt, den Pfad zu ihr als Argument übergeben lassen.
Mich würde ohnehin mal interessieren, was der Anwendungszweck des OPs über seinen Wunsch hinaus ist. Wann braucht man so ein Programm?
Insofern müssen Verzeichnisse garantiert sein, wenn nicht durch den Standard, dann durch das System.
Ich wiederhole meine Frage: Was bringt dir das?
Das bringt mir, dass ich gut schlafen kann, weil ich nicht versuche, Flügel für ein Auto zu entwickeln, weil ich vorher weiß, dass das Auto dann auch nicht fliegen kann.
-
Hobo schrieb:
Thuruk zeigt, wie man eine Datei öffnet, von der man den Pfad kennt.
Oder nur den Namen, wenn die Datei im selben Ordner liegt. Die kann ich dann zumindest unter Windows und Linux mit 'datei.open("name.endung")' öffnen.
Hobo schrieb:
Das bringt mir, dass ich gut schlafen kann, weil ich nicht versuche, Flügel für ein Auto zu entwickeln, weil ich vorher weiß, dass das Auto dann auch nicht fliegen kann.
-
Hobo schrieb:
[...]
Hat alles nichts mit dem Ursprungszitat zu tun, weshalb hier Trivialitäten wiederholt werden, die der OP offensichtlich schon probiert hat.
Das bringt mir, dass ich gut schlafen kann, weil ich nicht versuche, Flügel für ein Auto zu entwickeln, weil ich vorher weiß, dass das Auto dann auch nicht fliegen kann.
Korrigier mich, wenn ich falsch liege, aber dein Post war wohl eine Erwiderung auf dot, genau ein Post vorher, oder nicht? Wenn ja: Was willst du dot und uns sagen? Was hat er falsch gemacht? Wenn nein: Warum postest du zusammenhanglos etwas Offensichtliches?
Thuruk schrieb:
Oder nur den Namen, wenn die Datei im selben Ordner liegt. Die kann ich dann zumindest unter Windows und Linux mit 'datei.open("name.endung")' öffnen.
Du hast es immer noch nicht verstanden. Lies dir die Antworten nochmal durch und probier deine Vorgehensweise mit einem anderen Working Directory.
