![]() |
TFileStream löscht Datei-Inhalt bei Fehler
Hallo Freunde der schwer erkennbaren Realität, :shock: :shock: :shock:
ich erstelle einen Filestream, weise diesen einer bereits bestehenden Datei mit relevanten Daten zu und öffne ihn mit <fmOpenReadWrite OR fmShareExclusive>, bis hierhin alles ganz gewöhnlich. Dann weise ich dem Property <size> einen Wert zu, der die Byte-Anzahl des Heaps übersteigt, eine Fehlermeldung wird generiert "nicht genügend Speicherplatz auf der Festplatte" und der Dateiinhalt wird automatisch gelöscht. :kotz: Die Datei ist da, aber leer, der vorherige Inhalt wurde aufgrund des Heap-Fehlers einfach gelöscht, <size> steht nicht auf dem ursprünglichem Wert, sondern auf null. Ich sitze also da, habe Angst davor paranoid zu sein, und probiere das eben Beschriebene wieder aus, und wieder und wieder und wieder. --> Immer das gleiche Ergebnis. Datei-Inhalt weg. :stupid: Dieses Phänomen und dessen Sinn mögen mir bitte erklärt werden. :gruebel: |
Re: TFileStream löscht Datei-Inhalt bei Fehler
Hallo
Du hast schon try finally Free gemacht, oder? Gruss Shaman |
Re: TFileStream löscht Datei-Inhalt bei Fehler
du sagst ja im Prinzip dem Betriebssystem wie groß die Datei werden soll, das Betriebssystem stellt fest das du die Datei aber nicht auf diese Größe bringen kannst also muss es reagieren. Da vermutlich mit dem Setzen der größe die Arbeit beginnt und erst später festgestellt wird das es nicht möglich ist die neue Größe zu setzen bleibt somit nur noch übrig die Datei auf größe 0 zu setzen da die gewünschte größe nicht möglich ist und der ursprung schon verändert wurde.
(Alles nur theorie dich ich mir ausgedacht hab sie aber für relativ wahrscheinlich halte) |
Re: TFileStream löscht Datei-Inhalt bei Fehler
Zitat:
nicht das Recht die Daten zu löschen, die vor meinem Dateizugriff bestanden haben. @SirThornberry : Ich bin der Meinung beim Zugriff auf die Property <size> sollte Filestream intern prüfen, ob man den allokierten Space überhaupt allokieren kann. Denn bis Dato muss der Programmierer entweder ein Klasse von TFilestream ableiten und dies dazu programmieren oder man fragt vor Veränderung der <size> explizit ab, ob die Veränderung < Heap ist. (So hab' ich's gelöst) |
Re: TFileStream löscht Datei-Inhalt bei Fehler
Moin!
Wieso eigentlich immer "Heap"?? Die Meldung und der Fehler bezieht sich allgemein auf den Speicherplatz auf dem Datenträger wo die Datei liegt und hat doch nix mit dem Heap zu tun, weil dieser wird soweit nicht genutzt bei einem TFileStream - der hat noch nicht mal einen Buffer sondern kapselt nur die WinAPI Dateifunktionen... MfG Muetze1 |
Re: TFileStream löscht Datei-Inhalt bei Fehler
Zeig doch etwas Code!
Nur Beschreibungen sind etwas schwierig! greetz mytar :) |
Re: TFileStream löscht Datei-Inhalt bei Fehler
Oh klar, das Wort "Heap" ist in diesem Falle falsch. :wall:
Delphi-Quellcode:
.. löscht bei mir die ganze Datei inkl. vorherigen Inhalt. :kotz:
...
try Filestream:= TFileStream.create(filename, fmOpenReadWrite OR fmShareExclusive); Filestream.size:= 9999999999; finally filestream.free; |
Re: TFileStream löscht Datei-Inhalt bei Fehler
Was würde es dir nützen?
Du schreibst ja sowieso nichts rein. Wenn du ans Dateiende willst:
Delphi-Quellcode:
Und dann kannst du alles hinzufügen, was du willst!
FileStream.Position := FileStream.Size;
greetz mytar :-D |
Re: TFileStream löscht Datei-Inhalt bei Fehler
Moin!
@mytar: das ist eine Exploit Code um den Fehler darzustellen damit ihn jeder nachvollziehen kann... @DannyBoy: ich debugge das mal und versuche mal eine Lösung zu bringen... MfG Muetze1 |
Re: TFileStream löscht Datei-Inhalt bei Fehler
Ähm, 9999999999d = 2540BE3FFh
Ich hoffe, dass es sich um eine NTFS-Partition handelt (FAT32 mag Dateien > 2GB nicht, ebenso wenig wie zuviele Dateien in einem Verzeichnis). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz