kopieren von datei mit fputc
-
Hallo liebe User,
schreibe gerade ein Programm zur Übung und finde meinen fehler nicht.
Ich lese eine txt mit dem Inhalt 2d.aa2 aus und erhalte in der Kopie "ÿÿÿÿÿÿÿ".
Was mache ich falsch?#include <stdio.h> #include <stdlib.h> #include <windows.h> int main() { char ch; int pos; int i2=0; char exe[10]; FILE *exep1, *exep2; do { sprintf(exe,"beschreibenv2%i.exe",i2); exep1 = fopen("c1.txt", "r");//---------------------lese 1te exe und speicher sie im string exep2 = fopen(exe, "w");//---------------------beschreibe 2te exe mit string fseek(exep1, 0L, SEEK_END); // file pointer at end of file pos = ftell(exep1); fseek(exep2, 0L, SEEK_SET); // file pointer set at start while (pos--) { ch = fgetc(exep1); // copying file character by character fputc(ch, exep2); } fclose(exep1); fclose(exep2); i2++; } while(i2 <= 4);//---------------------anzahl der durchläufe return 0; }
LG SyntaxNull
-
Das Array exe ist zu klein für den Dateinamen.
-
Und: Beim Zurücksetzen des Filepointers auf den Beginn der Datei verwechselst Du die Filepointer.
-
Stimmt aber komischer weise klappt das,
hab den Wert von 10 auf 30 gesetzt und alles beim Alten.In der exe die erstellt werden soll steht bloß "ÿÿÿÿÿÿÿ"
-
SyntaxNull schrieb:
Stimmt aber komischer weise klappt das
Nein, das klappt nicht. Es erzeugt undefiniertes Verhalten. Das kann so aussehen, als ob es klappt. Jedenfalls kannst du dich nicht darauf verlassen, dass das abstürzt oder so.
-
@Belli:
könntest du mir das erklären?fseek(exep1, 0L, SEEK_END); // file pointer at end of file pos = ftell(exep1); fseek(exep2, 0L, SEEK_SET); // file pointer set at start while (pos--) { ch = fgetc(exep1); // copying file character by character fputc(ch, exep2); }
Den Teil meinst du bestimmt, den habe ich mir herauskopiert.
wo genau ist da der Fehler?
-
@MFK:
Ok danke das wusste ich nicht.
-
Du setzt doch zuerst den Filepointer exep1 auf das Ende der zu lesenden Datei. Und den setzt Du nicht wieder zurück, Du beginnst also mit dem Lesen hinter dem Ende der zu lesenden Datei.
Da, wo Dein Kommentar 'file pointer set at start' steht, setzt Du den falschen Filepointer, nämlich den der zu schreibenden Datei (exep2) auf Dateibeginn ...
-
Ok es klappt jetzt danke euch
Top!
-
Jetzt hab ich das Problem dass es mir nicht alles ausgibt..
Irgendwann ersetzt das Programm einfach alles mit diesen "ÿÿÿÿÿÿÿ".
Womit hängt das zusammen?
-
SyntaxNull schrieb:
Womit hängt das zusammen?
Das könnte an einem Fehler in deinem Programm liegen.
-
Liegt es daran dass char nicht alle Sonderzeichen einspeichern kann?
Wenn ja welchen Datentyp kann ich da benutzen?
-
Du solltest dir mal eine systematische Arbeitsweise angewöhnen, im Minutentakt ständig zw. 'funktioniert' und 'funktioniert nicht' zu wechseln deutet auf chaotisches Handeln hin.
Vergesse den ganzen fseek-Müll, für deine Aufgabe reicht eine simple fgetc/fputc Schleife aus.
Dann muss aber ch vom Typ int sein, wegen der EOF-Erkennung beim fgetc return.
-
Ja
tut mir leid, bin seit gestern 13 uhr, mit 2 st pause, am lernen..
Da lässt ab und zu die Konzentration nach.Hab noch eine Möglichkeit gefunden mit ein paar MoveFile(), werde beides probieren. Danke für den Tipp.
-
Du kannst es so machen wie bei http://www.cplusplus.com/reference/cstdio/fgetc/
oderint cht // wichtig, damit EOF aufgenommen werden kann. .... while((ch = fgetc(exep1)) != EOF) fputc(ch, exep2);
-
SyntaxNull schrieb:
Ja
tut mir leid, bin seit gestern 13 uhr, mit 2 st pause, am lernen.
Ich glaube nicht, dass Du eine gute Strategie zum lernen gewählt hast.
Was Du bisher zeigst sind mehr oder weniger fortgeschrittene Konzepte (die Du zum Teil nicht verstehst) für simple Aufgaben. Meiner Meinung nach die typische Melange, wenn Du mit Google und Internet lernst.Was ist das Lernziel, und welche Materialien (Bücher, Kursunterlagen, Übungsaufgaben) hast Du?
-
~Nochmal, weil ein t kein ; ist
~
int ch; // wichtig, damit EOF aufgenommen werden kann. .... while((ch = fgetc(exep1)) != EOF) fputc(ch, exep2);
-
@DirkB:
Danke hab das gemacht uns soweit klappt es auch, wie bisher kann ich normale Textdokumente kopieren aber bei einer .exe wirds schwer.
Hat wohl mit codepage zutun, da es bei bestimmten Zeichen hängen bleibt. oder einfach diese yyy spammt.
@Furble Wurble:
Besuche momentan die 11 klasse für ita auf einem bk und habe da auch unterlagen zu.
Habe vor etwas mit Virtual Box rumzuexperimentieren um ein besseres Verständniss für Software zu bekommen und dabei ein Maß an Spaß zu halten um motivierter dran zu bleiben.
-
Auf dem bk haben wir viele Befehle die ich benutze noch nicht gehabt, normaler weise bin sitze ich auch nicht solange am stück dran, sollten ursprünglich nur 2 st sein.. mein ergeiz hat mich etwas gepackt..
Entweder die Fehler, meine Müdigkeit oder ich
-
SyntaxNull schrieb:
... uns soweit klappt es auch, wie bisher kann ich normale Textdokumente kopieren aber bei einer .exe wirds schwer.
Hat wohl mit codepage zutun, da es bei bestimmten Zeichen hängen bleibt. oder einfach diese yyy spammt.
Nein.
Du öffnestdie Dateien im normalen (Text-)Modus.
Das bringt zum einen eine Ersetzung des Zeilenendes²
und bei Windows noch die Auswertung vom Steuerzeichen mit dem Wert 26 gemacht. Das bedeutet Dateiende: http://de.wikipedia.org/wiki/SubstitutionszeichenDarum musst du Nichttext-Dateien im Binary-Mode öffnen.
²Das Zeilenende wird auf den verschiedenen Systemen (in den Dateien) unterschiedlich dargestellt. (als \n oder \r oder beidem \r\n). Im Text im Rechner steht es aber nur mit \n.
-
endlich, danke DirkB
ein einfaches b hat mir gefehlt..