Kommandozeilenparameter übergeben



  • Was ist mit der Lösung von Ajaw?
    Nicht nur eine Zeile rauskopieren und irgendwo einsetzen.
    Sondern komplett übernehmen!



  • Airdamn schrieb:

    Was ist mit der Lösung von Ajaw?
    Nicht nur eine Zeile rauskopieren und irgendwo einsetzen.
    Sondern komplett übernehmen!

    der Quellcode von Ajaw scheint ja zu funktionieren, aber soll er nicht eigentlich die Daten aus dem "in"-File ins "out"-File schreiben?

    und wegen getline: da steht immer Bezeichner fehlt



  • myFile.open schrieb:

    Airdamn schrieb:

    Was ist mit der Lösung von Ajaw?
    Nicht nur eine Zeile rauskopieren und irgendwo einsetzen.
    Sondern komplett übernehmen!

    der Quellcode von Ajaw scheint ja zu funktionieren, aber soll er nicht eigentlich die Daten aus dem "in"-File ins "out"-File schreiben?

    Macht er das etwa nicht? Was macht er sonst?

    und wegen getline: da steht immer Bezeichner fehlt

    Hast du alle nötigen Header eingebunden? (in deinem letzten Code fehlt zumindest die <string>)



  • jaa, der string-include ist wieder drin, ist mir auch schon aufgefallen

    aber wenn ich jetzt den code hier habe

    #include <iostream>
    #include <fstream>
    
    using namespace std;
    
    int main(int argc, char** argv)
    {
    
    	if (argc != 3) return -1;
    
        ifstream in(argv[1]);
        ofstream out(argv[2]);
    
        if ((!in.is_open()) || (!out.is_open())) {
            return -1;
        }
    
        out << in.rdbuf();
    
    	out.close();
    
    	return 0;
    }
    

    Müsste er doch alles aus "in" nach "out" übergeben, oder?
    Tut er aber nicht 😕



  • Eigentlich sollte er - hast du das Programm mal durch den Debugger gejagt? (btw, und übergibst du überhaupt gültige Dateinamen?)



  • hi 🙂

    ja debugt hab ich es, keine Fehler o.ä. - dennoch

    inwiefern gültige Dateinamen? 🙄



  • Dann baust Du Ausgaben ein, damit Du mitbekommst ob das Programm frühzeitig beendet oder komplett durchläuft.

    #include <iostream> 
    #include <fstream> 
    
    using namespace std; 
    
    int main(int argc, char** argv) 
    {
        if (argc != 3)
    	{
    		cout << "Fehler: zu wenige Parameter übergeben!" << endl;
    		return EXIT_FAILURE;
    	}
    
    	ifstream in(argv[1]);
    	ofstream out(argv[2]);
    
        if (!in.is_open())
    	{
    		cout << "Fehler: konnte die Datei '" << argv[1] << "' nicht zum lesen öffnen!" << endl;
            return EXIT_FAILURE;
        }
    
    	if (!out.is_open()) { 
    		cout << "Fehler: konnte die Datei '" << argv[2] << "' nicht zum schreiben öffnen!" << endl;
    	}
    
    	out << in.rdbuf();
        out.close();
    
        cout << "Verarbeitung abgeschlossen!" << endl;
    
        return EXIT_SUCCESS; 
    }
    


  • Du willst mir doch wohl nicht sagen, dass deine Datei immer auf "C:\" liegt und immer den gleichen Namen (also einen namen ohne leerzeichen ist) hat.

    Weiters versteh ich überhaupt nicht wieso ihr alle so alte Befehle verwendet.
    Du möchtest z.b dein Problem mit dem uralten "FILEPOINTER" lösen (der übrigens auch nur ein Stream ist).

    Alles im Zusammenhang mit Nulltermierten Strings (char 😉 oder Char Arrays ist umständlich.
    Warum verwendet ihr nicht einfach AnsiString's (zu finden in der "dstring.h"). Das ist eine tolle Klasse die alle Features von char * oder char[] oder auch Widestrings beinhaltet. Das geht alles RuckZuck und easy.

    Wenn ich du wäre würde ich versuchen zum laden von Dateien die Klasse "TStringList" verwenden. 😉

    Natürlich kann ich auch volle irren und ihr habt die von mir erwähnten Klassen gar nicht. Ich als Borland C++ Programmierer verwende jedenfalls nur diese tollen "Hilfen" 😃



  • Ich als Borland C++ Programmierer

    MÖP! Da ist dein Problem 😉

    #include <iostream>
    #include <fstream>
    
    int main(int argc, char** argv)
    {
        if (argc != 3)
        {
            std::cout << "FEHLER: Zu wenige Parameter übergeben!\n" 
                      << argv[0] << " [input] [output]" << std::endl;
            return 1;
        }
    
        std::ifstream in(argv[1]);
        std::ofstream out(argv[2]);
        if (!in)
        {
            std::cout << "FEHLER: Die Datei\"" << argv[1] << "\" konnte nicht zum Lesen geöffnen werden!" << std::endl;
            return 2;
        }
    
        if (!out) 
        {
            std::cout << "FEHLER: Die Datei Datei \"" << argv[2] << "\" konnte nicht zum Schreiben geöffnet werden!" << std::endl;
            return 3;
        }
    
        out << in.rdbuf();
        std::cout << "Dateiinhalt kopiert!" << std::endl;
    }
    

    Funktioniert problemlos ...

    my_programm.exe "C:\Programme\Test\Test.exe" "C:\Test.txt"
    


  • Das Programm läuft mittlerweile - und das problemlos. 😉

    Danke an alle!!!!!! 👍 👍 👍

    Thema kann geclosed werden 🙄


Anmelden zum Antworten