2010-11-20 19 views
0

Wie kann ich einige Zeichen aus einer Datei mit C-Programm löschen?Löschen eines Zeichens aus einer Datei in C

Ich konnte keine vordefinierten Funktionen dafür finden.

Um den Zweck zu verstehen, ich versuche, eine Datei über einen Socket zu senden, wenn N Bytes erfolgreich gesendet werden, möchte ich diese Bytes aus der Datei löschen. Am Ende wird die Datei leer sein. Jede andere Möglichkeit, dies effizient zu tun?

Dank Pradeep

Antwort

3

Wenn sie am Ende sind, um die Datei auf die entsprechende Länge gestutzt. Wenn dies nicht der Fall ist, müssen Sie die Datei neu schreiben.

+0

Obwohl beachten Sie, dass Standard C keine Funktion zum Abschneiden einer Datei (außer 0 Länge) hat. POSIX funktioniert genauso wie Windows. –

1

Ihr Weg ist ziemlich ineffizient für große Dateien, da Sie "den Rest der Datei" einige Bytes weiter zum Anfang kopieren müssten, was viel kostet. Ich würde lieber die "aktuelle Sendeposition" irgendwo außerhalb der Datei aufzeichnen und diese Information aktualisieren. Auf diese Weise müssen Sie den Rest der Datei nicht so oft kopieren.

+0

Ich dachte das gleiche, aber was passiert, wenn der Client (der die Datei sendet) abstürzt? – Blacklabel

+1

Was passiert, wenn die Stromversorgung unterbrochen wird, bevor Festplattenpuffer gelöscht werden? Gleiches Problem. Was ist, wenn die Stromversorgung unterbrochen wird, während Sie die Bytes vom Anfang der Datei löschen? Die Dateidaten werden beschädigt. Sie fragen besser nach dem Server, den Sie senden, an wie viele Bytes er empfangen und von diesem Zeitpunkt an gesendet hat. – cdhowie

+0

@Blacklabel: Sie sollten die "aktuelle Position" von Zeit zu Zeit synchronisieren. Und vielleicht sollte der Client die gewünschte Position in die Anfrage aufnehmen (wie HTTP Content-Range/206) – Vlad

1

Es gibt keine einfache Möglichkeit, Bytes vom Anfang einer Datei zu löschen. Sie müssen an der Stelle beginnen, an der Sie die Datei schneiden wollen, und von dort bis zum Ende der Datei lesen und an den Anfang der Datei schreiben.

Es könnte sinnvoller sein, nur zu verfolgen, wie viele Bytes Sie bereits in eine andere Datei geschrieben haben.

1

sollten Sie einen Index verwenden, der auf den Anfang der Daten zeigt, die Sie noch nicht gesendet haben. Es ist nicht notwendig, zu löschen, was Sie gesendet haben, übergeben Sie sie einfach, wenn Sie die ganze Datei senden, löschen Sie sie.

0

Wenn die Char's nacheinander sind, warum nicht versuchen, fseek();

Verwandte Themen