2016-05-27 16 views
1

ich bin mit diesem Code ein bisschen Kopfschmerzen mit:C Dateien triying zu überschreiben

FILE usuaris* 
.... 

usuaris=fopen("usuarisfinal.txt","a+b"); 
fseek(usuaris,(pos-1)*sizeof(Tusuari),SEEK_SET); 
fwrite(&usuaux,sizeof(Tusuari),1,usuaris); 

Was ich tun möchte, ist ein Tusuari registrieren mit „usuaux“ in der Position „pos“ zu überschreiben, aber ich füge am Ende der Datei "usuaux" hinzu. Ich bin mir bewusst, dass ich den Modus "a + b" in "r + b" ändern kann, aber ich verstehe nicht ganz, warum ich nicht in der Lage bin, es so zu machen!

P.S. Sorry für die möglichen Fehler, Englisch ist irgendwie eine dritte Sprache für mich!

+0

Sie haben die Datei mit 'a' (append)' geöffnet, so dass alle Schreiboperationen an die Datei angehängt werden. Das ist die Wurzel des Problems. Verwenden eines "Modus" von Read Plus Binary :("r + b") sagt 1) Ich möchte die Datei lesen. 2) Ich möchte in die Datei schreiben, wo auch immer der aktuelle Dateipositionsindikator. und 3) Ich möchte alle Lese- und Schreiboperationen mit 'binary' durchführen (keine spezielle Behandlung von Zeilenumbrüchen usw.). Auch nicht 'w + b' als Öffnung für 'write' zu ​​verwenden, führt dazu, dass die Datei abgeschnitten wird während der 'fopen()' – user3629249

Antwort

3

Wenn Sie eine Datei mit dem Modus "a+" öffnen, werden Schreibvorgänge immer an das Ende der Datei geleitet.

Vom man page für fopen:

a + Öffnen zum Lesen und Anhängen (am Ende der Datei zu schreiben). Die Datei wird erstellt, wenn sie nicht existiert. Die anfängliche Dateiposition zum Lesen befindet sich am Anfang der Datei, aber Ausgabe ist immer an das Ende der Datei angehängt.

Beim Öffnen einer Datei in diesem Modus wirkt sich die Einstellung des Offsets nur auf Lesevorgänge aus. So verwenden Sie den Modus "r+" ist was Sie wollen.