AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi TFileStream löscht Datei-Inhalt bei Fehler
Thema durchsuchen
Ansicht
Themen-Optionen

TFileStream löscht Datei-Inhalt bei Fehler

Ein Thema von Dannyboy · begonnen am 20. Aug 2004 · letzter Beitrag vom 20. Aug 2004
Antwort Antwort
Seite 1 von 2  1 2      
Dannyboy

Registriert seit: 4. Aug 2003
Ort: Delphi-Heaven
418 Beiträge
 
Delphi 7 Personal
 
#1

TFileStream löscht Datei-Inhalt bei Fehler

  Alt 20. Aug 2004, 09:31
Hallo Freunde der schwer erkennbaren Realität,
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.
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.
Dieses Phänomen und dessen Sinn mögen mir bitte erklärt werden.
How much wood would a wood-chuck chuck if a wood-chuck would chuck wood?
Check this out.
DANNYBOY
  Mit Zitat antworten Zitat
Benutzerbild von Shaman
Shaman

Registriert seit: 2. Nov 2003
Ort: Schweiz
407 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: TFileStream löscht Datei-Inhalt bei Fehler

  Alt 20. Aug 2004, 09:35
Hallo

Du hast schon try finally Free gemacht, oder?

Gruss
Shaman
Daniel Pauli
Looking for answers from the great beyond
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: TFileStream löscht Datei-Inhalt bei Fehler

  Alt 20. Aug 2004, 09:38
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)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Dannyboy

Registriert seit: 4. Aug 2003
Ort: Delphi-Heaven
418 Beiträge
 
Delphi 7 Personal
 
#4

Re: TFileStream löscht Datei-Inhalt bei Fehler

  Alt 20. Aug 2004, 09:47
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)
How much wood would a wood-chuck chuck if a wood-chuck would chuck wood?
Check this out.
DANNYBOY
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#5

Re: TFileStream löscht Datei-Inhalt bei Fehler

  Alt 20. Aug 2004, 10:45
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
  Mit Zitat antworten Zitat
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#6

Re: TFileStream löscht Datei-Inhalt bei Fehler

  Alt 20. Aug 2004, 10:48
Zeig doch etwas Code!
Nur Beschreibungen sind etwas schwierig!

greetz
mytar
Francis Obikwelu
  Mit Zitat antworten Zitat
Dannyboy

Registriert seit: 4. Aug 2003
Ort: Delphi-Heaven
418 Beiträge
 
Delphi 7 Personal
 
#7

Re: TFileStream löscht Datei-Inhalt bei Fehler

  Alt 20. Aug 2004, 12:23
Oh klar, das Wort "Heap" ist in diesem Falle falsch.
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.
How much wood would a wood-chuck chuck if a wood-chuck would chuck wood?
Check this out.
DANNYBOY
  Mit Zitat antworten Zitat
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#8

Re: TFileStream löscht Datei-Inhalt bei Fehler

  Alt 20. Aug 2004, 16:08
Was würde es dir nützen?

Du schreibst ja sowieso nichts rein.

Wenn du ans Dateiende willst:
FileStream.Position := FileStream.Size; Und dann kannst du alles hinzufügen, was du willst!

greetz
mytar
Francis Obikwelu
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#9

Re: TFileStream löscht Datei-Inhalt bei Fehler

  Alt 20. Aug 2004, 22:12
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
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#10

Re: TFileStream löscht Datei-Inhalt bei Fehler

  Alt 20. Aug 2004, 22:20
Ä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).
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz