C: In Files löschen / schreben

Gast #6325788
Lesenswert?

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 #6325791
Lesenswert?

ä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 #6325806
Lesenswert?

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.
#6325896
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren