Seite 1 von 1
Teilinhalt einer Datei löschen?
Verfasst: 13.02.2005 23:10
von Kooky
Hi,
wollte mal fragen, ob es die möglichkeit gibt, bestimmte teile einer datei zu löschen.
Z.B. steht in meiner Datei "Test" drin. Jetzt möchte ich, dass da nur noch "Tes" drin steht. Gibt es dafür eine Lösung, außer eine 2. Datei anzulegen oder den Arbeitsspeicher zu benutzen?
Das geht nicht anders, weil ich mit sehr großen Dateien arbeite und es nicht so praktisch wäre, wenn man sich mal schnell ein paar GB in den Ram lädt, oder eine 2. Datei zu erstellen, die auch so groß ist.
Würde mich über Hilfe wiedermal freuen
mfg. Kooky
Verfasst: 13.02.2005 23:26
von Kaeru Gaman
gibt leider keine andere möglichkeit, als das parallel in eine zweite schreiben,
wenn du nicht alles auf einmal in den speicher ziehen willst.
eine lösung wie von dir angestrebt ist nur mit datenbanksystemen möglich.
Verfasst: 14.02.2005 00:12
von GPI
openfile() und FileSeek()
Allerdings ist die Sache kompliziert als du denkst. Wenn du ein zeichen komplett entfernen willst, wirds schwierig. Willst du nur die Zeichen mit andern Überschreiben, ist es einfacher.
Ich würde dir aber trotzdem empfehlen, zumindest blockweise (achtung dein gesuchtes wort könnte an der Grenze zum Block liegen) einzulesen, da es so wesentlich schneller ist.
Wenn du weißt, das das gesuchte wort ein String ist, das mit null terminiert ist (und in programm auch nicht angenommen wird, das der String eine feste größe ist, dann kannst du in der Regel mit einen 0 den String kürzen.
Verfasst: 14.02.2005 00:25
von Kaeru Gaman
GPI hat geschrieben:Wenn du ein zeichen komplett entfernen willst, wirds schwierig.
ja, das meinte ich mit "geht nicht".
die von dir vorgeschlagene 'mit-null-überschreiben-methode' ist zwar machbar,
aber sie legt plattenplatz tot, und ich weiss nicht,
wie zuverlässig mehrfaches stringauslesen auf hunderte nullen reagiert...
Verfasst: 14.02.2005 13:45
von Kooky
eben.
Überschreiben ist kein Problem, das weiß ich ja, aber es ist eben nur die sache mit dem löschen.
hm
auf jeden fall erstmal danke für die antworten. Vielleicht fällt noch jemanden was ein
m.f.g. Kooky

Verfasst: 14.02.2005 14:22
von freedimension
Gleichzeitiger Schreib- und Lesezugriff ist nicht möglich? Dann könntest du nämlich einfach mit Fileseek den Dateizeiger auf die erste Position hinter dem zu löschenden Bereich setzen, von dort dann mittels ReadData einen größeren Block einlesen, den Dateizeiger dann vor den zu löschenden Bereich setzen, die gerade eben gelesenen Daten schreiben usw.
Zumindest müsstest du dann keine Kopie anlegen.
Aber Vorsicht, wenn dein Programm während dieses "Umschreibens" abstürzt oder auf einmal der Strom weg ist, ist die Datei erstmal futsch

Verfasst: 14.02.2005 14:57
von Kooky
aber das hat leider wieder den bedeutenden nachteil, dass dann am ende der datei 0 Stings sind. D.H. es würde die Datei nicht wirklich verkleinern , sondern nur den zu löschenden bereich ans ende kopieren.
Ich wollte mir nämlich einen FileArchiver basteln,
mit dem ich alle meine Dateien und downloads
abspeichern, komprimieren und verschlüsseln kann.
Wenn der Archiv jetzt 10 GB groß ist und sich eine Datei darin befindet,
die 3 GB groß ist und ich die lösche, wäre es unschön,
wenn entweder die Datei genauso groß bleibt, oder ich das
ganze in eine 2. Datei kopiere, weil ich dann kurzweilig 17 GB
auf der Festplatte bräuchte und das wäre schlecht.
Argh es muss doch eine möglichkeit geben, eine Datei einfach zu verkleinern.
mfg. Kooky

Verfasst: 14.02.2005 17:03
von freedimension
Vielleicht kommst du ja damit weiter:
http://msdn.microsoft.com/library/defau ... offile.asp
Ist aber halt "windows only"
Verfasst: 14.02.2005 18:19
von Kooky
Danke!
Das kann ich gut benutzen =)))))
mfg. Kooky