C++: Wie Pfad ermitteln, aus dem Konsolenprogramm gestartet wurde?



  • Crysis_02 schrieb:

    Wie macht man denn sonst sowas?

    Das kommt auf das Betriebssystem an. Es gibt üblicherweise klar definierte Speicherorte für Benutzerdokumente und Einstellungen.



  • Nein. Sowas brauche ich nicht. Wenn das prog im oderner x gespeichert ist dann soll die dateiwenn man 1 eongibt es in x gespeichert ist. Wenn man aber C:/y eingibt dann soll es halt im ordner y gespeichert werden.


  • Mod

    Crysis_02 schrieb:

    Wenn das prog im oderner x gespeichert ist dann soll die dateiwenn man 1 eongibt es in x gespeichert ist.

    MFK schrieb:

    So was macht man nicht. Ist auch für normale Benutzer unter aktuellen Betriebssystemen gar nicht erlaubt.



  • Beispielsweise wenn das Programm in einem Standardsuchpfad einer Shell liegt und von dieser aus direkt mit seinem Namen ohne Pfadangabe aufgerufen wurde, dann steht da auch nur dieser Name.

    Oha, stimmt, grad ausprobiert. Dann kannst du meine Antwort streichen, wusste ich auch nicht, danke.


  • Mod

    Der Tobi schrieb:

    Oha, stimmt, grad ausprobiert. Dann kannst du meine Antwort streichen, wusste ich auch nicht, danke.

    Um das übrigens mal kurz zu machen: Diese Frage kommt hier dauernd. Warum sie an sich nicht sinnvoll ist, wurde schon erklärt. Falls man aus irgendeinem Grunde doch diesen Pfad braucht (und das sollte man nicht!), dann kann man Standardmittel sowieso vergessen. Es gibt betriebssystemabhängige Methoden, mit denen dies so halbwegs möglich ist, aber soweit ich mich erinnere auch nicht bei jedem denkbarem Szenario. Wie es genau geht, erfährt man, indem man das Forum durchsucht oder (aber nur wenn die Suche wirklich nichts gebracht hat) im entsprechenden Betriebssystemforum nachfragt. Wo einem dann übrigens wieder als allererstes gesagt werden wird, dass man diesen Pfad nicht benötigen sollte.



  • So ich habe dies zwar noch nicht integriert.
    Da der Benutzer auch selber einen Pfad angeben soll es mit nem Slash oder Backslash macht wollte ich die string.find und string.replace funktion benutzen.

    Wenn ich diese aber nun so integriere:

    size_t found5;
    			if (folder.find("\\"))
    			{
    				found5=folder.find("\\");
    				folder.replace(found5,1,"\\\\");
    			}
    			size_t found4;
    			if (folder.find("\/"))
    			{
    				found4=folder.find("\/");
    				folder.replace(found4,1,"\\\\");
    			}
    

    stürzt es immer ab.

    Kann mir jemand sagen, was falsch ist?


  • Mod

    http://www.cplusplus.com/reference/string/string/find/

    Return Value
    The position of the first occurrence in the string of the searched content.
    If the content is not found, the member value npos is returned.

    Hervorhebung durch mich.

    P.S.: Einen Slash brauchst du nicht escapen. Außerdem sollte es sowieso Wurst sein, ob da nun Slashes oder Backslashes in dem Pfad stehen. Pfade sind Betriebssystemsache. Wenn das Betriebssystem Backslash versteht, dann kannst du auch welche benutzen.



  • file.open kann damit aber nicht umgehen. Um einen Pfed zu haben brauche ich C:\\Programme\...

    unterdessen eht es aber wieder.


  • Mod

    Crysis_02 schrieb:

    file.open kann damit aber nicht umgehen.

    Zeig mal Details. Ich rate mal, dass du Windows benutzt (weil kein anderes verbreitetes System Backslash für Pfade benutzt). Windows kann seit ein paar 15 Jahren mit Slashes statt Backslashes umgehen.



  • undesssen geht das alles 😉

    jedoch bräuchte ich noch den pfad de sprogrammes auslesen mit

    int main(int argc, char* argv[]);
    

    wenn ich

    cout<<argv [0];
    

    eingeben dann kommt auch der Pfad mit der .exe zum schluss.

    Ich kann ich die char* in einen String umwanden, um sie zu kürzen und um diese weiterzubenutzen?


  • Mod

    Crysis_02 schrieb:

    Ich kann ich die char* in einen String umwanden, um sie zu kürzen und um diese weiterzubenutzen?

    Klar, einfach zuweisen. Aber hast du den Thread überhaupt gelesen? Erstens ist das eine schlechte Idee und zweitens geht das so ohnehin nicht, wie alles schon diskutiert wurde.



  • Crysis_02 schrieb:

    undesssen geht das alles 😉

    jedoch bräuchte ich noch den pfad de sprogrammes auslesen mit

    int main(int argc, char* argv[]);
    

    wenn ich

    cout<<argv [0];
    

    eingeben dann kommt auch der Pfad mit der .exe zum schluss.

    Ich kann ich die char* in einen String umwanden, um sie zu kürzen und um diese weiterzubenutzen?

    Mach einfach

    std::string directory(argv[0], strrchr(argv[0], '\\'));
    

    Achtung: Auf Back/Forward-Slash achten!
    Aber sieh dir doch SeppJs Beitrag über meinem an, der sagt mehr.

    Edit: Rechtschreibfehlä.



  • Ich habe es elesen hab aber jetzt etwas anderes, jedoch auch mit einem char array.

    char pfad[256];
    getcwd( pfad, 256);
    cout<<pfad; //Ausgabe ist hier mein gewünschter Pfad.
    

    Wie kann ich nun dieses Array in einen String umwandeln? Am besten mit Code beispiel.



  • Crysis_02 schrieb:

    Ich habe es elesen hab aber jetzt etwas anderes, jedoch auch mit einem char array.

    char pfad[256];
    getcwd( pfad, 256);
    cout<<pfad; //Ausgabe ist hier mein gewünschter Pfad.
    

    Wie kann ich nun dieses Array in einen String umwandeln? Am besten mit Code beispiel.

    Ähm, einfach einen string damit initialisieren?



  • Crysis_02 schrieb:

    hab aber jetzt etwas anderes,

    Das funktioniert auch nicht. Das Cwd kann der Pfad sein, in dem dein Programm steht, muss es aber nicht. Insbesondere kann sich das cwd zur Laufzeit ändern (daher das c in cwd).

    Was du da machst, haben schon tausende vor dir versucht. Was dabei rauskommt, wurde dir schon gesagt. Du bist anscheinend fest entschlossen, jeden Fehler, den man diesbezüglich machen kann, persönlich zu wiederholen.



  • Es get aber immer. Ich benutze diese funktion einmal beim öffnen der exe. Es ist die erste funktionen. Danach brauch sie nicht mehr.



  • Crysis_02 schrieb:

    Es get aber immer.

    Nö. Bei dir und deinem Minimalbeispiel vielleicht.



  • Wenn es die erste Funktion ist dann wurde da 0,nix verschoben etc. Dadurch gibt es keinen anderen Pfad.


  • Mod

    Crysis_02 schrieb:

    Wenn es die erste Funktion ist dann wurde da 0,nix verschoben etc. Dadurch gibt es keinen anderen Pfad.

    🙄 Gut, dass du deinen eigenen Thread so aufmerksam gelesen hast (in dem erklärt wird, warum das nicht geht, nicht deine Phantasiekonstrukte wegen denen du meinst, warum das nicht geht) oder einen die anderen 1000 Threads rausgesucht hast, in denen das Problem noch genauer beschrieben wird. Aber ich bin nicht dein Babysitter…

    MFK schrieb:

    Was du da machst, haben schon tausende vor dir versucht. Was dabei rauskommt, wurde dir schon gesagt. Du bist anscheinend fest entschlossen, jeden Fehler, den man diesbezüglich machen kann, persönlich zu wiederholen.

    qft. Aber manchen Leuten kann man eben nicht helfen.



  • Crysis_02 schrieb:

    Ich habe es elesen hab aber jetzt etwas anderes

    Eh, du weißt schon, wo Dateien gespeichert werden, wenn du keinen absoluten Pfad angibst? Ob du der open-Funktion nun filename.txt oder <cwd>/filename.txt übergibst, kommt aufs gleiche raus.


Anmelden zum Antworten