2016-11-10 6 views
-2

Ich ac Code für eine Datei-Handling zu schreiben, die ein Dateiformat wie unten haben:Aktualisieren/eine Datei in c zu überschreiben, ohne eine neue oder temporäre Datei erstellen


Domain1:IP:Port:Id1,Id2,Id3 
Domain2:IP:Port:Id1,Id2, 

Es sollte möglich sein, eine neue Zeile mit neuen Domänen hinzuzufügen, und es sollte auch möglich sein, bestehende Domänen-IDs zu modifizieren. Und mit den Modifikations-IDs kann die Anzahl der IDs erhöht oder verringert werden, wie in einem Vorgang, ich könnte ID4 zu Domain1 im obigen Beispiel hinzufügen, und auch in einem anderen Vorgang sollte ich ID1 von Domain2 als Beispiel löschen können .

Also meine Fragen (Danke für Hilfe):

  1. Ich möchte nicht über eine temp/neue Datei erstellen und den Namen ändern und alte Datei löschen. Kann ich die vorhandene Datei lesen und schreiben? Wie kann es sicher machen? (Ich habe ein paar Beispiele mit der Aktualisierung von Zeilen (mit fwrite) versucht, aber ich sehe, dass es einige Zeichen aus der nächsten Zeile entfernt, wenn ich einige Zeichen wie ID4 und andere seltsame Zeichen in einigen Versuchen hinzufügen)). Irgendein Beispielcode?

  2. Auch später müsste ich Sperren zu Datei verwenden, so dass nur einer in der Lage sein sollte, auf einmal zu lesen und zu schreiben. Irgendwelche Vorschläge/Verbindungen geschätzt.

Vielen Dank.

Antwort

0

Für anfügen zu einer Datei benötigen Sie keine temporäre Datei oder etwas. Wenn Sie einige Zeichen durch gleiche Zeichenanzahl ersetzen möchten, benötigen Sie auch keine temporäre Datei.

Aber wenn Sie möchten, andere Modifikation zu tun, dass die Größe des Inhalts ändert Sie einige temporäre Puffer irgendeiner Art benötigen. Entweder eine temporäre Datei oder ein In-Memory-Puffer.

+0

Danke für Ihre Antwort, in meinem Fall, jede Zeile könnte mehr oder weniger Zeichen nach der Änderung, ich möchte nicht eine neue Datei erstellen, aber ja, ich habe versucht, eine Zeichenfolge mit einem neuen Text zu erstellen und zu fwrite zu tun. etwas wie das: char str [30]; strcpy (str, "lokal: IP: Port: 1,3,5"); Rückspulen (f); int dom_len = strlen (sds_domain); int test1 = ftell (f); printf ("LINE NUMBER% d", test1); fwrite (str, 1, strlen (str), f); , aber es überschreibt den Text in der zweiten Zeile. – Richi

Verwandte Themen