C: In Files löschen / schreben

Gast #6325788
Hallo,

wie kann man eigentlich in Files bestimmte Zeilen löschen? In den 
Büchern (Tutorials) wird ja beschreiben wie man Dateien öffnet / 
erstellt.

Aber wie kann man eine Datei öffnen und dann z.B. die erste Zeile 
löschen (in Standard-C).

Oder an bestimmter Position Text in eine (bereits vorhandene) Datei 
einfügen?

Mit fseek klappt es irgendwie auch nicht. Ich dachte das würde 654321 
ergeben.(es ergibt aber 123456)
1
   FILE* fp=fopen("text.txt", "a+");  
2
                                                                                                                                                               
3
   fputc('1', fp);                                                      
4
   fseek(fp, -1, SEEK_CUR);                                             
5
   fputc('2', fp);                                                      
6
   fseek(fp, -2, SEEK_CUR);                                             
7
   fputc('3', fp);                                                      
8
   fseek(fp, -3, SEEK_CUR);                                             
9
   fputc('4', fp);                                                      
10
   fseek(fp, -4, SEEK_CUR);                                             
11
   fputc('5', fp);                                                      
12
   fseek(fp, -5, SEEK_CUR);                                             
13
   fputc('6', fp);                                                      
14
                                                                        
15
   fclose(fp);
Gast
ähm, das wäre von der Idee her wohl sinnvoller:
1
   
2
   fputc('1', fp);                                                      
3
   fseek(fp, -1, SEEK_CUR);                                             
4
   fputc('2', fp);                                                      
5
   fseek(fp, -1, SEEK_CUR);                                             
6
   fputc('3', fp);                                                      
7
   fseek(fp, -1, SEEK_CUR);                                             
8
   fputc('4', fp);                                                      
9
   fseek(fp, -1, SEEK_CUR);                                             
10
   fputc('5', fp);                                                      
11
   fseek(fp, -1, SEEK_CUR);                                             
12
   fputc('6', fp);

aber es funktioniert ja auch nicht.
Gast
ja, fseek lässt die Position auch beim Schreiben ändern, aber

Jörg W. schrieb:
> aber das hilft dir nicht
1
                                                                      
2
   FILE* fp=fopen("text.txt", "w");                                     
3
                                                                        
4
                                                                        
5
   fputc('1', fp);                                                      
6
   fputc('2', fp);                                                      
7
   fputc('3', fp);                                                      
8
   fputc('4', fp);                                                      
9
   fputc('5', fp);                                                      
10
                                                                        
11
   rewind(fp);                                                          
12
   fputc('a', fp);                                                      
13
   fputc('b', fp);                                                      
14
                                                                        
15
                                                                        
16
   fclose(fp);

das ergibt einfach: ab345.
Die alten Daten werden überschrieben. Alles klar, danke.
Gast
das schon. In dem Beispiel dürfte nur ein Zeichen in der Datei übrig 
bleiben, das letzte weil der Zeiger ja immer wieder zurückgesetzt wurde.
Gast
Johannes S. schrieb:
> In dem Beispiel dürfte nur ein Zeichen in der Datei übrig
> bleiben,

ja, das stimmt.

Im "w"-Modus steht da nur das letzte Zeichen (wenn man nach jeder 
Zeichen-Ausgabe einen Schritt zurückgeht).

Einfach nur was dazwischen quetschen, geht so nicht.
zitter_ned_aso schrieb:
> wie kann man eigentlich in Files bestimmte Zeilen löschen?

Gar nicht.

> In den Büchern (Tutorials) wird ja beschreiben wie man Dateien öffnet /
> erstellt.
>
> Aber wie kann man eine Datei öffnen und dann z.B. die erste Zeile
> löschen (in Standard-C).

Indem man die Datei bis auf diese Zeile komplett neu schreibt.

> Oder an bestimmter Position Text in eine (bereits vorhandene) Datei
> einfügen?

Auch das geht nicht. Du musst dann alles, was danach kommt, auch nochmal 
neu in die Datei schreiben.

Eine Datei ist im Prinzip so ähnlich wie ein Array, nur dass es auf der 
Festplatte ist statt im RAM und dass es nur einen einzelnen Zeiger gibt, 
über den man darauf zugreifen kann. Mit fseek wählst du dabei, wohin 
dieser zeigen soll.
Beitrag #6325898 wurde von einem Moderator gelöscht.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.