Kommandozeilenparameter übergeben
-
schon klar :p
//Edit:
soweit bin ich jetzt
#include <iostream> #include <fstream> #include <vector> #include <stdio.h> using namespace std; int main(int argc, char** argv) { string line; if (argc != 3)return -1; FILE *in, *out; in = fopen (argv[1], "r"); out = fopen (argv[2], "w"); if (!in || !out)return -1; while(!fgets(line, 1000 ,in)) fputs(line, out); fclose (in); fclose (out); return 0; }Mir gefällt daran nicht, dass
1. bei fgets eine Zeilenlänge angegeben werden muss, mag aber keine haben

2. es nicht geht

gibts ne andere Variante?
-
myFile.open schrieb:
gibts ne andere Variante?
Öhm, wie wäre es mit der C++-Variante dieses Programms?
(std::fstream & std::getline())
-
Willst du uns verarschen? Guck dir vllt. mal die 1. Seite an ... da stehen 2 Lösungsvorschläge?!
-
(D)Evil schrieb:
Willst du uns verarschen? Guck dir vllt. mal die 1. Seite an ... da stehen 2 Lösungsvorschläge?!
etwa
out << in.rdbuf();? Ich seh dabei leider keinen Effekt

Aber danke für den äußerst freundlichen Hinweis!
Wie gesagt, bin kein Programmierer, aber naja..
--------------------------------------
(std::fstream & std::getline())Mit "getline" hats bei mir nicht funktioniert, aber muss ja nicht unbedingt an der Fuktion liegen

Danke The-Kenny
-
myFile.open schrieb:
Mit "getline" hats bei mir nicht funktioniert, aber muss ja nicht unbedingt an der Fuktion liegen

Na herzlichen Dank für diese ausführliche Fehlerbeschreibung
Jetzt weiß hier wirklich jeder, was du falsch gemacht hast
*scnr*
-
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
