Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TFileStream löscht Datei-Inhalt bei Fehler (https://www.delphipraxis.net/28153-tfilestream-loescht-datei-inhalt-bei-fehler.html)

Dannyboy 20. Aug 2004 09:31


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:

Shaman 20. Aug 2004 09:35

Re: TFileStream löscht Datei-Inhalt bei Fehler
 
Hallo

Du hast schon try finally Free gemacht, oder?

Gruss
Shaman

SirThornberry 20. Aug 2004 09:38

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)

Dannyboy 20. Aug 2004 09:47

Re: TFileStream löscht Datei-Inhalt bei Fehler
 
Zitat:

Zitat von Shaman
Hallo

Du hast schon try finally Free gemacht, oder?

Gruss
Shaman

Yo, hab' ich. Und selbst wenn nicht, gibt dies dem Betriebssystem
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)

Muetze1 20. Aug 2004 10:45

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

mytar 20. Aug 2004 10:48

Re: TFileStream löscht Datei-Inhalt bei Fehler
 
Zeig doch etwas Code!
Nur Beschreibungen sind etwas schwierig!

greetz
mytar :)

Dannyboy 20. Aug 2004 12:23

Re: TFileStream löscht Datei-Inhalt bei Fehler
 
Oh klar, das Wort "Heap" ist in diesem Falle falsch. :wall:
Delphi-Quellcode:
...
try
  Filestream:= TFileStream.create(filename, fmOpenReadWrite OR fmShareExclusive);
  Filestream.size:= 9999999999;
finally
  filestream.free;
.. löscht bei mir die ganze Datei inkl. vorherigen Inhalt. :kotz:

mytar 20. Aug 2004 16:08

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:
FileStream.Position := FileStream.Size;
Und dann kannst du alles hinzufügen, was du willst!

greetz
mytar :-D

Muetze1 20. Aug 2004 22:12

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

NicoDE 20. Aug 2004 22:20

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.
Seite 1 von 2  1 2      

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