Kommandozeilenparameter übergeben
-
Was daran falsch ist?
char sfile;
FILE *sfile;... du hast 2 Variablen mit dem selben Namen ...
#include <iostream> #include <fstream> int main(int argc, char** argv) { if (argc != 3) return -1; std::ifstream in(argv[1]); std::ofstream out(argv[2]); if (!in || !out)return -1; out << in.rdbuf(); }
-
und wenn du Fehlermeldungen hast und um Hilfe bittest, waere es natuerlich hilfreich, wenn du auch die Fehlermeldungen mit postest. Dann faellts leichter, nach der ursache zu suchen

-
ich denke dein problem ist jenes, dass deine CMD Line (also in deinem Fall: C:\Quelle.txt C:\Resultat.txt) Leerzeichen enthält.
Denn sobald dein ein Leerzeichen vorhanden (z.b C:\hallo du da.txt) ist schaut das Ganze so aus:
arg[0] = Pfad von deiner EXE Datei
arg[1] = C:\hallo
arg[2] = du
arg[3] = da.txt1. Verwende AnsiString's die sind deutlich einfacher
2. Überprüfe deinen Dateipfad immer irgendwie (z.b mit cout oder printf oder du kannst auch ShowMessage verwenden
3. Wenn dein Dateipfad irgendwie nicht passt dann musst du in den einzelnen "arg"'s zusammsetzten oder du schreibst deinen CMD Line um. Das sieht dann so aus: PROGRAMM "C:\Meine Quelle.txt" "C:\Mein Resultat.txt"arg[0] = Pfad von deiner EXE Datei
arg[1] = C:\Meine Quelle.txt
arg[2] = C:\Mein Resultat.txtVielleicht hilfts ja
-
soulbug schrieb:
1. Verwende AnsiString's die sind deutlich einfacher
Die Richtung stimmt, aber bitte std::string aus dem Standard-Header <string> verwenden.
-
ich denke dein problem ist jenes, dass deine CMD Line (also in deinem Fall: C:\Quelle.txt C:\Resultat.txt) Leerzeichen enthält.
Denn sobald dein ein Leerzeichen vorhanden (z.b C:\hallo du da.txt) ist schaut das Ganze so aus:
arg[0] = Pfad von deiner EXE Datei
arg[1] = C:\hallo
arg[2] = du
arg[3] = da.txtso solls doch aber auch sein
C:\Quelle.txt C:\Resultat.txt
^argv[1]......... ^argv[2]
demnach soll er argv[1] als Quelldatei einlesen und argv[2] als Ziel

oder hab ich dich jetzt falsch verstanden?

-
Offensichtlich, denn Du bekommst ein Beispiel mit Leerzeichen im Dateinamen und wendest es auf ein Beispiel ohne Leerzeichen im Dateinamen an

Was passiert denn, wenn Du die Datei "C:\Hallo du da.txt" nach "D:\hier her" (ohne Anführungszeichen zu benutzen) kopieren willst? Richtig: argc == 6. Das ist nicht was Du möchtest.
-
LordJaxom schrieb:
Offensichtlich, denn Du bekommst ein Beispiel mit Leerzeichen im Dateinamen und wendest es auf ein Beispiel ohne Leerzeichen im Dateinamen an

Was passiert denn, wenn Du die Datei "C:\Hallo du da.txt" nach "D:\hier her" (ohne Anführungszeichen zu benutzen) kopieren willst? Richtig: argc == 6. Das ist nicht was Du möchtest.
mein Beispiel hat doch Leerzeichen
zwischen 1.und 2. Argument 
-
IN EINEM Dateinamen, nicht ZWISCHEN ZWEI Dateinamen

-
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; }