argv in ifstram übergeben



  • @DirkB:
    Das habe ich bei mir eigentlich drinnen stehen. Ich weiß auch nicht wieso ich das nicht mit reinkopiert hab 😮

    ...und DANKE für eure Antworten!!



  • Entweder hast du #include <exception> vergessen oder kein using namespace std; oder das std:: vor std::exception vergessen.
    Weiterhin ist Visual Studio etwas komisch. Wenn du die exe über Visual Studio startest, dann ist der aktuelle Ordner nicht der exe-Ordner, sondern der Projektordner. Gib der exe mal einen absoluten Pfad, C:\temp\test.txt oder so.



  • Ja, hat nur das "std::" gefehlt. 🤡

    Jetzt habe ich das Problem, dass ich es unter F5 nicht mit Parameter debuggen kann.
    In der cmd wirft er die Exception und ich erhalte den cout stream inder Konsole: "Error: Failed opening file"

    mfg



  • Das ist doch gut.
    Der kann die Datei wirklich nicht finden.
    Gib mal einen absoluten Pfad an.



  • nwp3 schrieb:

    Weiterhin ist Visual Studio etwas komisch. Wenn du die exe über Visual Studio startest, dann ist der aktuelle Ordner nicht der exe-Ordner, sondern der Projektordner.

    Das hat den Grund, dass sich Release und Debug das gleiche working_set_directory teilen. Ich finde das praktisch.



  • Da ändert sich leider nichts. 😕

    mfg



  • Du kannst im Projekt unter debug Aufrufparameter angeben und das working directory festlegen.



  • Weiterhin in der cmd:
    Error: Failed opening file

    Über F5 mit übergebenen Parameter:
    0

    mfg



  • So, ich habe jetzt dem Debugger auch de kompletten Pfad gegeben. jetzt kommt bei beiden:
    Error: Failed opening file

    mfg



  • Dann steht die Datei nicht dort oder in argv[1] steht nicht der Pfad (weil er z.B. Leerzeichen enthält).



  • Habe das ganze jetzt nochmal neu gemacht.
    Dabei habe ich das *.txt Dokument wo anders hingetan. (Indem Pfad waren leerstellen 🤡 )

    und n habe ich mit n initialisiert:

    int number(char *argv[]){
    	ifstream inTxt(argv[1]);
    	if (!inTxt)
    		throw runtime_error("Failed opening file");
    	int n=0;              //HIER!!!!!
    	if (!inTxt >> n){
    		inTxt.close(); //todo: RAII
    		throw runtime_error("Failed reading file");
    	}
    	inTxt.close(); //todo: RAII
    	return n;
    }
    

    output:
    0

    Bitte helft mir 😞
    mfg



  • und n habe ich mit n initialisiert

    natürlich mit 0.

    mfg



  • Und was steht in argv[1]?
    RAII macht der stream ganz alleine, ist ist weder was todo noch ist ein close notwendig.



  • manni66 schrieb:

    RAII macht der stream ganz alleine, ist ist weder was todo noch ist ein close notwendig.

    Das war auch glaub ich eher ein Scherz von nwp3.



  • So, ich habe mir argv[1] ausgeben lassen.
    Ich hätte dem Debugger den Pfad ohne abschließendes Semikolon angeben müssen.

    DANKE für eure Hilfe!!
    Es funzt



  • Tim06TR schrieb:

    nwp3 schrieb:

    Weiterhin ist Visual Studio etwas komisch. Wenn du die exe über Visual Studio startest, dann ist der aktuelle Ordner nicht der exe-Ordner, sondern der Projektordner.

    Das hat den Grund, dass sich Release und Debug das gleiche working_set_directory teilen. Ich finde das praktisch.

    Der Begriff "working_set_directory" ist mir nicht bekannt.

    Das was du meinst heisst "working directory".
    Und dann gibt's noch den Begriff "working set" (Begriffserklärung bitte bei Interesse selbst ergoogeln).
    Aber "working set directory" gibt's - behaupte ich jetzt mal - nicht.


Anmelden zum Antworten