Guten Morgen
In einer Delphi 2009 Anwendung verwenden wir StoreToIniFile um die benutzerbezogenen Einstellungen eines QuantumGrids zu speichern.
In dieser Anwendung wird an zwei Stellen auf die gleiche Datei zugegriffen:
* beim Öffnen des Hauptformulars werden die Einstellungen für alle Grids die auf dem Hauptformular sind gelesen
* beim Öffnen eines weitren, modalen Bearbeitungsformulars werden dessen Grid-Einstellungen gelesen und beim Schliessen wieder gespeichert
Beim beim Speichern der Grid-Einstellungen des modalen Formulars kommt es oft (aber nicht immer) zu einer
Exception die besagt die INI-Datei wäre bereits geöffnet.
Frage: wenn die Fehlermeldung lautet
"Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird.", ist damit tatsächlich ein
anderer Prozess gemeint, der die Datei verwendet? Also definitiv nicht der Prozess der die Datei zu öffnen versucht?
Wenn es definitiv ein anderer Prozess ist, dann wäre es nur erklärbar mit einer gleichzeitig laufenden weiteren Instanz der Anwendung (die INI-Datei wird nur von dieser einen Anwendung erzeugt), denkbar z.B. wenn die Anwendung "hängt" und der Benutzer sie erneut startet.
Doch die Zugriffe auf die INI-Datei sind zu kurz um dann den Fehler mit einer zweiten Instanz erklären zu können.
Zweite Möglichkeit: ein Virenscanner oder ähnliches greift auf die Datei zu. Hat damit jemand schon ähnliches erlebt oder ist das nur Spekulation?
Code:
exception class : EFCreateError
exception message : Cannot create file "\\server\dfs\Home\Username\Documents\i4Settings\Abfertigung41.1.ini". Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird.
main thread ($10fc):
004822d1 +0b9 Ladelist411.exe Classes TFileStream.Create
004821f4 +020 Ladelist411.exe Classes TFileStream.Create
004809fc +018 Ladelist411.exe Classes TStrings.SaveToFile
0048f45d +039 Ladelist411.exe IniFiles TMemIniFile.UpdateFile
006e94ad +005 Ladelist411.exe cxStorage TcxIniFileWriter.EndWrite
006e710b +05b Ladelist411.exe cxStorage TcxStorage.StoreWithExistingWriter
006e7087 +037 Ladelist411.exe cxStorage TcxStorage.StoreTo
006e712a +00e Ladelist411.exe cxStorage TcxStorage.StoreToIni
0079ebc9 +06d Ladelist411.exe cxGridCustomView TcxCustomGridView.StoreToIniFile