Zeile ergänzen
-
Guten Tag liebes Forum,
1. Frage:
wie kann ich in der Sektion [TODO] in der Datei das Ende der zweiten Zeile anfahren und dort noch Text anhängen.
2. Frage:
Leider wurden Datei I/O und die ganze String Praxis bei mir im Studium ausgespart. Gibt es da ein einschlägiges Tutorium hierzu?#include <stdio.h> #include <stdlib.h> // String in Datei schreiben // Zweite zeile komplettieren int main() { char *a = {"komplett\nkompl\nkomplett"}; // in der zweiten Zeile fehlt was! int i,j; printf("%d\n",strlen(a)); FILE* output1 = fopen("strtest.txt","wt"); for(i=0;i<strlen(a);i++) { fprintf(output1,"%c",a[i]); } // TODO an dieser Stelle soll in der zweiten Zeile noch was angehängt werden fclose(output1); return 0; }
Dank vielmals
-
Zeichen dazwischenquetschen geht nicht. Das heißt, wenn du am Ende der zweiten Zeile (die Position kannst du per fseek() erreichen) etwas reinschreibst, wird der Anfang der dritten Zeile überschrieben und du mußt den kompletten Rest der Datei neu schreiben.
-
Das ist echt worst-case.
Gibt es da einen Workaround oder ähnliches??? Wie machen das die Profis?
Danke!
-
Die schauen sich vor dem Schreiben an, ob sie ihre Ausgaben komplett vorbereitet haben
(Festplattenzugriff IST ein Engpass, deshalb solltest du die Datei-Arbeit auf ein Minimum reduzieren)
-
Warum geht kein Workarround mit fsetpos ?????
-
Weil du auch mit fsetpos() keine Zeichen in die Datei reinquetschen kannst - die Ausgabeanweisungen überschreiben generell den Dateiinhalt ab der aktuellen Schreibposition (egal wie du dorthin gekommen bist).
-
dateien sind an sich binaer. zeilen gibts da noch nicht. nur nen haufen bytes.
lesen, zurueckschreiben.
kein workaround.
-
man könnte sich auch ein eigenes format ausdenken, z.b. jede zeile hat maximal 500 bytes, d.h. zeile1 beginnt bei offset 0, zeile2 bei 500, zeile3 bei 1000 usw. und nicht benutzte bytes in einer zeile werden mit nullen aufgefüllt...
dann wird die datei zwar riesengross: 500000bytes für 1000 zeilen, aber dafür geht das austauschen von zeilen ziemlich schnell.