fstream-Problem


  • Mod

    JFaron schrieb:

    Was mache ich falsch bzw. wie sollte ich die Existenz einer Datei anders abfragen?

    Derzeit hast du magisches Denken. Glaubst du, dass bei

    if ("Moderiert Thomas Gottschalk noch Wetten dass?")
     cout << "Ja.";
    else
     cout << "Nein.";
    

    wirklich geprüft wird, was Thomas Gottschalk derzeit macht? Nein, es wird bloß die Adresse eines Zeichenkettenliterals ausgewertet und geprüft, ob diese 0 ist oder nicht.

    Du kannst eine Datei auf Existenz prüfen, indem du sie zum Lesen öffnest, funktioniert dies, so existiert sie. Dazu musst du aber wirklich ein Streamobjekt anlegen, nicht bloß den Code dazu in ein Zeichenkettenliteral schreiben. Wenn du feiner aufgelöste Details wissen möchtest (z.B. vielleicht existiert die Datei, aber du darfst sie nicht lesen) musst du auf Betriebssystemfunktionen zurückgreifen.



  • Stimmt, war ein Denkfehler drin :p
    Habs jetzt mit

    ifstream check("path/test.exe");
    if (check) {
        ...
    } else {
    ...
    }
    

    gelöst. Aber nun wird immer die Ausgabe bei else verwendet...


  • Mod

    JFaron schrieb:

    Aber nun wird immer die Ausgabe bei else verwendet...

    Dann wurde die Datei wohl nicht geöffnet.



  • SeppJ schrieb:

    JFaron schrieb:

    Aber nun wird immer die Ausgabe bei else verwendet...

    Dann wurde die Datei wohl nicht geöffnet.

    Das komische ist ja, dass ich den Pfad mehrfach überprüfe, jedes mal. Auch wenn er richtig ist, komme ich bei else raus... Der Code an sich stimmt aber?!
    Ich habe es sowohl mit einfachem und doppeltem Backslash und dem normalen Slash getestet. (Der normale müsste funktionieren, der doppelte auch, der einfache nicht, oder?)



  • Vorgehen:
    1. Gib den Pfad absolut an - so hast Du keine Probleme mit dem Working Directory
    2. Versuche ob / oder \ (bzw. \) benötigt wird

    Dann müsstest Du eigentlich zum Ziel kommen...



  • theta schrieb:

    Vorgehen:
    1. Gib den Pfad absolut an - so hast Du keine Probleme mit dem Working Directory
    2. Versuche ob / oder \ (bzw. \) benötigt wird

    Dann müsstest Du eigentlich zum Ziel kommen...

    Ich habe die entsprechenden Zeilen jetzt einfach kopiert. Im ersten Fall "path/test.exe" lande ich bei der "else-Ausgabe". Im Zweiten Fall "C:/Program Files (x86)/test/test.exe" ist die Bedingung wahr. Die Eingabe in path habe ich jetzt per Datei gemacht, so dass ich Schreibfehler auch ausschließen kann.



  • Das hier:

    "path/test.exe"
    

    und das hier:

    "C:/Program Files (x86)/test/test.exe"
    

    ist ja auch ein himmelweiter Unterschied!



  • Ich hatte doch bereits geschrieben, dass es sich bei "path" um einen String handelt, wenn du das mit dem Unterschied meinst.
    Eine Lösung habe ich jetzt immer noch nicht...


  • Mod

    Belli schrieb:

    Das hier:

    "path/test.exe"
    

    und das hier:

    "C:/Program Files (x86)/test/test.exe"
    

    ist ja auch ein himmelweiter Unterschied!

    Ich ahne etwas: Liest du (der Threadersteller) vorher einen String ein, den du path nennst?

    edit: Dein Beitrag in der Zeit als ich schrieb bestätigt diesen Verdacht. Und somit sind wieder bei Thomas Gottschalk...
    Tipp: Nochmal ganz weit zurück zu den Grundlagen von C++, lernen was eine Variable ist, was eine Zeichenkette ist, wie man damit umgeht, usw.



  • JFaron schrieb:

    Ich hatte doch bereits geschrieben, dass es sich bei "path" um einen String handelt, wenn du das mit dem Unterschied meinst.

    Hatte ich übersehen. Dann gibt es für Dich nur einen Lösungsweg:
    Lern ein paar Grundlagen!


Anmelden zum Antworten