Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi FileExists / Caching Problem (https://www.delphipraxis.net/179145-fileexists-caching-problem.html)

TommyLo 17. Feb 2014 11:00

Delphi-Version: 2007

FileExists / Caching Problem
 
Hallo zusammen,

ich habe das Problem das FileExists eine Datei nicht findet, obwohl sie vorhanden ist. (Umgebung: Client: Win8.1, Server: Win2008).
Im konkreten Beispiel erstelle ich die Tabelle per SQL und prüfe im Anschluss ob sie existiert. FileExists sagt daraufhin nein. Habe FileExists in einer Schleife prüfen lassen, erst nach 5 Sekunden dann das Ergebnis: "vorhanden".
Habe dafür genügend Beispiele, neu erstellte Textdatei soll mit RenameFile umbenannt werden => ErrorCode 2 FileNotFound. Immer das gleiche. Nach einem Sleep von 5 Sekunden funktioniert es dann, aber das kann nicht die endgültige Lösung sein.

Sieht für mich ganz nach dem bekannten SMB Redirector Caching Problem aus, vgl. hierzu: http://blogs.msdn.com/b/winsdk/archi...r-smb-2-0.aspx

D.h. das FileExists wird nicht erneut auf dem FileServer aufgerufen, sondern das Ergebnis aus dem lokalen Cache verwendet.

Wenn man nun nach Lösungsvorschlägen sucht, wird überall gasagt das man die Registrierungs Einträge (z.B. FileNotFoundCacheLifetime) entsprechend auf 0 setzen soll.
Das kommt aber für meine Applikation nicht in Frage.

Habe Ihr auch solche Probleme, bzw. Erfahrungen?

mjustin 17. Feb 2014 11:04

AW: FileExists / Caching Problem
 
Wenn die Konfigurationsänderung der CahceLifeTime nicht möglich ist: wo liegt das "Folge-"Problem, ist es für die Benutzer störend, lange warten zu müssen?
Ähnliche Probleme hat man bei Internetzugriffen auf entfernt liegende Server, eine Lösung ist dann, die potentiell lang dauernde Aktion in einen Thread auszulagern.

Der schöne Günther 17. Feb 2014 11:21

AW: FileExists / Caching Problem
 
Ich hätte auch gesagt, dass ist doch mehr oder weniger auch das vom Benutzer erwartete Verhalten.

Was ich nicht ganz durchschaue: "erstelle ich die Tabelle per SQL und prüfe im Anschluss ob sie existiert". Willst du an die Rohdaten, was ein Datenbanksystem auf dem Server auf die Platte schreibt?

mkinzler 17. Feb 2014 11:23

AW: FileExists / Caching Problem
 
Aus Sicherheitsgründen sollten aber die Dateien eines DBMS nicht in einer Freigabe liegen.
Um welches DBMS handelt es sich den?

TommyLo 17. Feb 2014 11:56

AW: FileExists / Caching Problem
 
Hi, danke schon mal soweit.

Mein grundsätzliches Problem betrifft aber nicht die Datenbank. Wir haben ein Client / Server basierendes ApplikationsSystem, die Daten liegen auf einem FileServer das der User als Share eingebunden hat.
Nehmen wir mal eine ganz normale Textdatei. Ich prüfe ob die Datei existiert, FileExists sagt Nein.
Danach erstelle ich die Datei und führe anschließend FileExists wieder durch. Das Ergebnis ist nun immernoch Nein. Genau fünf Sekunden lang bis zum CacheLifeTime.

Klar, ich kann jetzt ein Sleep von 5 Sekunden einbauen, aber ich hatte gehofft das dies auch eleganter gelöst werden kann. Bzw. es vielleicht irgendein API Aufruf gibt, der unabhängig vom Cache prüft.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 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