AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TFileStream Fehler

Ein Thema von tomkupitz · begonnen am 11. Mai 2020 · letzter Beitrag vom 12. Mai 2020
Antwort Antwort
Seite 1 von 2  1 2      
tomkupitz

Registriert seit: 26. Jan 2011
339 Beiträge
 
Delphi 12 Athens
 
#1

TFileStream Fehler

  Alt 11. Mai 2020, 12:50
Hallo,

ich benutze TFileStream um meine Projektdaten (fortfolgend Integer-, Extended-Werte etc.) auf die Platte zu speichern. Dazu benutze ich Read und Write. Im Feld kommt es nun in seltenen Fällen dazu, dass Dateien beschädigt sind. Das kann ich anhand von Prüfsummen gut erkennen.

Meine allgemeine Frage ist nun: Habt ihr ähnliche Erfahrungen mit TFileStream und welche Ursachen gibt es dafür (Virenscanner o.ä.)?

Danke und beste Grüße
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: TFileStream Fehler

  Alt 11. Mai 2020, 12:59
Hallo,
wie groß sind die denn Dateien?

Je größer, desto mehr könnte eine Virenscanner was mit zu tun haben.

Arbeitest Du mit mehreren Threads?
Heiko
  Mit Zitat antworten Zitat
tomkupitz

Registriert seit: 26. Jan 2011
339 Beiträge
 
Delphi 12 Athens
 
#3

AW: TFileStream Fehler

  Alt 11. Mai 2020, 13:10
das Speichern passiert ohne weitere Threads. Die Dateien sind bis max. 10MB groß.

Beste Grüße
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: TFileStream Fehler

  Alt 11. Mai 2020, 13:39
Ich arbeite sehr viel mit TFileStream, unter anderem um Konfigurationen zu speichern. Korrupte Dateien sind mir diesbezüglich noch nicht untergekommen.

Was bei mir immer wieder zu Fehlern führte waren „fehlerhafte“ Speicherungen welche nicht „kompatibel“ mit den jeweiligen Typen beim Einlesen waren. Da lag der Fehler dann aber VOR dem Monitor...
Michael Kübler
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
880 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: TFileStream Fehler

  Alt 11. Mai 2020, 13:43
Sind denn Probleme mit der Hardware ausgeschlossen?
The angels have the phone box.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#6

AW: TFileStream Fehler

  Alt 11. Mai 2020, 14:07
VirenScanner sollten doch keine Teile in Dateien ohne Rückmeldung ändern?

Ansonsten macht TFileStream nicht Schlimmes und reicht dein Zeug direkt an Windows weiter (MSDN-Library durchsuchenWriteFile). Es hat auch keinen eigenen Cache, so wie z.B. die alten PascalFunktionen um Delphi-Referenz durchsuchenAssignFile, wo dann was verschwienden könnte, wenn du nicht richtig schließt.


ABER so wie früher gibt es auch hier zwei Funktionen zum Schreiben und auch nochmal zum Lesen.
Write und BlockWrite, bzw. jetzt ebenfalls .Write und .WriteBuffer, wobei jeweils Letzeres den Erfolg prüft, außer du willst selber Prüfen, aber dann solltest du auch das Result vom Write behandeln.
z.B. Platte ist voll, oder sonstige Fehler beim Schreiben (z.B. auch wenn der Virenscanner das Schreiben verbietet)


PS: Es gibt auch TReader und TWriter. Ddie Dinger werden z.B. von der VCL/FMX verwendet, um die BinärVersion der DFM zu speichern.
Sie speichern zu jedem Wert auch das Format, validieren beim Lesen die Typen und so kann man auch eine "Zahl" lesen, egal ob es Byte, Word oder Integer ist, oder String als ANSI oder UTF-8.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (11. Mai 2020 um 14:19 Uhr)
  Mit Zitat antworten Zitat
tomkupitz

Registriert seit: 26. Jan 2011
339 Beiträge
 
Delphi 12 Athens
 
#7

AW: TFileStream Fehler

  Alt 11. Mai 2020, 14:15
der Fehler tritt wirklich selten auf (bei uns in der Applikation nie). Doch gerade bei unseren OEMs stößt das sauer auf...

Hardwareprobleme kann ich auch nicht ausschließen.

Beste Grüße
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: TFileStream Fehler

  Alt 11. Mai 2020, 14:25
Hallo,
Zitat:
VirenScanner sollten doch keine Teile in Dateien ohne Rückmeldung ändern?
Es reicht ja, das Schreiben ein kleines bissel zu "verlangsamen".
Und wenn die Software dann das Schreiben abbricht -> Dateifehler.

Abhilfe könnte sein, die Datei unter einem anderen Namen zu speichern,
und wenn das geklappt hat (Prüfsumme), die Datei umzubenennen in den richtigen Dateinamen.
Heiko

Geändert von hoika (11. Mai 2020 um 14:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#9

AW: TFileStream Fehler

  Alt 11. Mai 2020, 14:55
Es reicht ja, das Schreiben ein kleines bissel zu "verlangsamen".
Und wenn die Software dann das Schreiben abbricht -> Dateifehler.

Eigentlich nicht.
Du gehst hier über den FileCache des OS, außerdem wartet dein Programm auf das Ende der Schreiboperation (Write/Close), da hier keine overlapped/asynchrone API benutzt wird.
Wenn es einen Fehler gibt und die Rückgabewerte ausgewertet werden, dann gibt es eine Fehlermeldung/Exception, falls z.B. der Virenscanner oder ein defektes Laufwerk sich meldet.
Und ist das Write zurückgekommen, dann steht es im WindowsFileCache ... selbst wenn du dann schnell das Programm abschießst, so lange du nicht auch Windows hart beendest, wird immernoch gespeichert ... kommt es da nochmal zu einem Fehler, dann poppt ein Popup auf und Windows meldet sich. (eigene Erfahrung, mit defekter USB-Platte, bzw. bei Fehlbedinung)

Es gab nur einen Fall, wo ich jahrelang Datenfehler hatte, aber da war es ein defekter USB 3-Treiber für meinen Intel-Chipsatz, der auf USB-Platten und bei USB-LAN-Adaptern alle paar MB immer mal paar Byte falsch übertagen hat und das nicht merkte.
Oder natürlich die Schuld des Benutzers ... Festplatte/USBStick abziehen, bevor fertig gespeichert wurde.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.604 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: TFileStream Fehler

  Alt 11. Mai 2020, 15:59
Benutzt Du .Write oder .WriteBuffer?

Falls ersteres: Prüfst Du auch den Rückgabewert, ob der komplette Buffer geschrieben wurde? Wenn nein, dürfte das das erste Problem sein.

Wir benutzen TFileStream in sehr großem Umfang und das auch noch multithreaded. Da geht normalerweise nichts verloren.

Aber wenn man nicht prüft, ob auch alles geschrieben wurde.
Thomas Mueller
  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 16:19 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