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 2 von 2     12   
tomkupitz

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

AW: TFileStream Fehler

  Alt 11. Mai 2020, 16:31
nutze nur Write und prüfe auch die Rückgabe. Stimmt soweit alles. Bleibt also der "externe Einfluss" auf das File nach dem Schreiben.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#12

AW: TFileStream Fehler

  Alt 11. Mai 2020, 17:14
Hab' sowas mal erlebt vor einigen Jahren:

Client schreibt per TaskPlaner konfiguriert alle 20 Minuten eine Datei in ein Verzeichnis auf einen Server.

Server liest per TaskPlaner alle 30 Minuten diese Verzeichnis aus, verarbeitet die dort gefundenen Dateien und verschiebt sie dann in ein Archiv.

Dabei konnte es passieren, dass der Server eine Datei liest, verarbeitet und verschiebt, während der Client sie noch schreibt.

Das kann auf Dauer nicht gut gehen und führt halt sporadisch zu Fehlern.

(Achso: Die Entwickler der beiden Programme hatten sie so geschrieben, dass sie Fehler großzügig ignorierten )

Eventuell eine ähnliche Konstellation beim Kunden?

Oder, sofern die Dateien ins "Netz" geschrieben werden sollten: Eventuell eine etwas "hakelige" Netzverbindung, die sporadisch mal (kurzfristig) unterbrochen wird?

Was steht bei Dir im Create des TFileStream für Mode?

Eventuell mal mit den möglichen Kombinationen "rumexperimentieren".

z. B.: tFileStream('dateiname',fmCreate or fmShareExclusive);
  Mit Zitat antworten Zitat
tomkupitz

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

AW: TFileStream Fehler

  Alt 11. Mai 2020, 18:43
ich habe manchmal nur fmCreate verwendet. Dann ist

Zitat:
tFileStream('dateiname',fmCreate or fmShareExclusive);
ein Ansatz. Danke.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TFileStream Fehler

  Alt 11. Mai 2020, 19:24
Ja, Delphi ist hier bissl Andersrum.

Eigentlich ist beim MSDN-Library durchsuchenCreateFile standardmäßig alles Exclusiv, aber beim TFileStream standardmäßig alles Shared.


Allerdings hast du beim fmCreate ein kleines Problem, denn dort kann man die Shared-Attribute nicht benutzen, weil das bereits $FFFF ist und $0010 (fmShareExclusive) da nicht mehr rein passt.
Falls nichts hilft, dann wäre noch THandleStream.Create(CreateFile(...), True) eine Variante.



PS: TFile.CreateXYZ, .OpenXYZ, .WriteXYZ und .AppendXYZ gibt es auch noch, auch wenn das intern auch wieder TFileStream benutzt, aber wenn es eh keinen Unterschied macht, dann wenigstens "einfach".
Delphi-Referenz durchsuchenIOUtils.TFile
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

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

Registriert seit: 29. Mär 2009
439 Beiträge
 
#15

AW: TFileStream Fehler

  Alt 12. Mai 2020, 07:23

Allerdings hast du beim fmCreate ein kleines Problem, denn dort kann man die Shared-Attribute nicht benutzen, weil das bereits $FFFF ist
Das ist schon seit vielen Jahren nicht mehr so (mindestens seit Delphi 2010):

Delphi-Quellcode:
unit Classes;
...
const
{ TFileStream create mode }

  fmCreate = $FF00;
Das ändert aber nichts daran, dass ein simples TFilestream.Create(Filename, fmCreate) die Datei immer mit exclusivem Zugriff erstellt.
Erst wenn man den Share-Mode explizit angibt wird dieser benutzt. Damit ist es möglich die Datei mit "fmCreate or fmShareDenyWrite" zu erstellen um so anderen Programmen die Möglichkeit zu geben die Datei bereits während des Schreibens zu lesen (z.B. bei Logdateien). Diese Möglichkeit gab es bei den sehr alten Delphiversionen (z.B. Delphi 2007) so nicht.

Geändert von samso (12. Mai 2020 um 15:46 Uhr) Grund: Ergänzung/Delphi 2010 ist das erste Delphi mit fmCreate=$FF00
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TFileStream Fehler

  Alt 12. Mai 2020, 11:51
Ohh, dann hatten se das unbemerkt irgendwann behoben. (im XE war es noch $FFFF, wo ich gestern nur mal schnell in den Code schaute )

Wer hätte den ahnen können, dass es nach 20 Jahren mal repariert wird.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#17

AW: TFileStream Fehler

  Alt 12. Mai 2020, 13:23
(im XE war es noch $FFFF, wo ich gestern nur mal schnell in den Code schaute )
Sorry, aber das glaube ich nicht, denn in der offiziellen Dokumentation steht etwas anderes VCL/XE/en/Classes

Geändert von samso (12. Mai 2020 um 13:26 Uhr) Grund: Typo
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TFileStream Fehler

  Alt 12. Mai 2020, 15:12
Als wenn jemals in der Hilfe immer die Wahrheit drin stand.

Ich war mir ganz sicher gestern noch ein
Delphi-Quellcode:
const
  fmCreate = $FFFF;
gesehn zu haben, als ich nach fmShareExclusive suchte.

Hmmm, stimmt, du hast Recht.

Aber fand grade nur noch diese Stelle (vermutlich diese Stelle im Augenwinkel gehabt)
Delphi-Quellcode:
constructor TFileStream.Create(const AFileName: string; Mode: Word; Rights: Cardinal);
var
  LShareMode: Word;
begin
  if (Mode and fmCreate = fmCreate) then
  begin
    LShareMode := Mode and $FF;
    if LShareMode = $FF then
      LShareMode := fmShareExclusive; // For compat in case $FFFF passed as Mode
und dich denke nicht, dass mir die Reste der alten Delphi 4, 7, TurboPascal und FreePascal unter die Augen kamen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 23:16 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