Datei als Parameter übergeben und öffen?



  • Hallo zusammen!

    Ich habe hier wieder mal ein kleines Problem. Eigentlich sollte das ganze doch ganz einfach sein, aber ich bekomms irgendwie nicht hin 😕
    Der Plan ist, dass ich ein Programm schreibe, welches eine Datei öffnen und bearbeiten soll. Die zu öffnende Datei soll beim Start aus der Konsole als Parameter übergeben werden.
    So ungefähr:

    convert.exe Datei.txt
    

    Bis jetzt habe ich es unter anderem so versucht:

    int main(int argc, char **argv)
    {...
    FILE *f;
    ...
    f = fopen(argv[2],"r");
    ...
    

    Aber irgendwie scheint das nicht zu laufen. Bekomme beim Ausführen dann immer diesen Fehler.
    Wenn ich mir mittels cout argv[2] ausgeben lasse steht da aber auch der richtige Dateinamen da! Die Datei ist auch im Verzeichnis, in dem die Exe ausgeführt wird...
    Wenn ich statt "f = fopen(argv[2],"r");" "f = fopen("Datei.txt","r");" ins Programm schreibe funktioniert auch alles wunderbar...

    Hab ich vielleicht irgend einen Denkfehler drin?
    Danke schonmal für euere Hilfe :xmas1:



  • 1. nimm streams
    2. würde ich ja mal auf argv[1] tippen?!

    bb



  • Probier einmal folgendes aus, danach solltest du deinen Fehler wissen:

    #include <iostream>
    int main(int argc, char* argv[])
    {
       for(int i = 0; i < argc; ++i)
       {
          std::cout << "Arg " << i << ": " << argv[i] << std::endl;
       }
    }
    


  • Bin auch ein Volldepp 🙄
    Ja klar, argv[1] ist die korrekte Form! Ich versuch mich zwar schon seit Wochen in C++ rein zu fitzen, aber der Fehler, dass es von 0 ab gezählt wird passiert mir immer wieder...

    @unskilled
    Bin wie gesagt noch nicht lang dabei. Wie meinst du das mit Streams?
    Was bringt das für Vorteile?




  • Administrator

    Mandel schrieb:

    Was bringt das für Vorteile?

    Als Anfänger sollte dir einfach bewusst sein, dass Streams C++ sind und FILE* C ist.
    Im weiteren Verlauf deiner Ausbildung in dem Bereich, werden dir dann sicher Dinge auffallen, wie Typsicherheit oder die Möglichkeit durch überladen der Operatoren << und >> auch für Klassen einfache Ein- und Ausgaben zu realisieren.

    Die Streams aus C++ sind halt für die Verwendung in C++ ausgerichtet, während FILE* und die f-Funktionen C sind und von C++ nichts wissen 😉

    Grüssli



  • Vielen Dank für die Erklärung. Ich habe es nur immer mit FILE* gemacht, weil ich es schon oft so gesehen habe.
    Ich werd mir die Streams jetzt mal anschaun :xmas1:



  • Dravere schrieb:

    Im weiteren Verlauf deiner Ausbildung in dem Bereich, werden dir dann sicher Dinge auffallen, wie Typsicherheit oder die Möglichkeit durch überladen der Operatoren << und >> auch für Klassen einfache Ein- und Ausgaben zu realisieren.

    Von der geringeren Möglichkeit Dinge falsch zu machen einmal ganz zu schweigen. Dann gibt es ja auch noch so Dinge, wie Formatierung, was mit streams so einfach wird.


Anmelden zum Antworten