Ich habe eine Library geschrieben, welche JSon Dateien einliest und per Callback an ein altes Delphiprogramm überträgt.
Wenn ich danach die Library mit FreeLibrary freigeben will, bekomme ich eine Exception "Disk write error".
Die künstliche Behelfsintelligenz meinte, daß das in den seltensten Fällen tatsächlich etwas mit einem Problem der Platte zu tun hat, sondern wahrscheinlich von der DLL geöffnete Dateien nicht geschlossen wurden.
Ich öffne Dateien per TFilestream, FPJSon und parse diese mittels JSonparser. Diese werden aber nach dem Einlesevorgang alle wieder freigegeben.
Gibt es eine Möglichkeit zu ermitteln, welche Filehandles an einem bestimmten Punkt noch geöffnet sind?
Lazarus 4.7 (rev lazarus_4_6-58-g310cad12d8) FPC 3.2.2 i386-win32-win32/win64
[gelöst] Geöffnete Filehandles?
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1858
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
[gelöst] Geöffnete Filehandles?
Zuletzt geändert von fliegermichl am Do 22. Okt 2026, 11:52, insgesamt 1-mal geändert.
- Zvoni
- Beiträge: 773
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 11 Pro (Laz4.3/FPC3.2.3)
- CPU-Target: 64Bit
- Wohnort: BW
Re: Geöffnete Filehandles?
Setz das FreeLibrary mal in einen Try/Except block, und im Except teil lass dir mal E.ClassName sowie E.Message geben.
Über die Exception-Klasse kann man ggfs. tiefer vordringen.
Offene FileHandles wüsste ich nicht wie, es sei denn du "sammelst" sie ein wenn du die Dateien öffnest
Siehe auch: https://www.freepascal.org/docs-html/rt ... andle.html
Über die Exception-Klasse kann man ggfs. tiefer vordringen.
Offene FileHandles wüsste ich nicht wie, es sei denn du "sammelst" sie ein wenn du die Dateien öffnest
Siehe auch: https://www.freepascal.org/docs-html/rt ... andle.html
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
-
Soner
- Beiträge: 819
- Registriert: Do 27. Sep 2012, 00:07
- OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
- CPU-Target: x86_64-win64
- Wohnort: Hamburg
Re: Geöffnete Filehandles?
Sysinternals Process Explorer kann herausfinden welches Programm/Prozess die Datei blockiert. Dann könntest du nachforschen, wie es das macht und ebenfalls in Lazarus so herausfinden welches Programm blockiert.
Im Menüpunkt [Find]->[Find Handle or Dll ..] muss man Dateiname, z.B. "dateix.json", eintragen, dann zeigt es das Programm, welches diese Datei sperrt. Falls du testest dann denke drann dass die Programme wie Notepad++ Dateiein nicht sperren, aber LibreOffice sperrt.
Im Menüpunkt [Find]->[Find Handle or Dll ..] muss man Dateiname, z.B. "dateix.json", eintragen, dann zeigt es das Programm, welches diese Datei sperrt. Falls du testest dann denke drann dass die Programme wie Notepad++ Dateiein nicht sperren, aber LibreOffice sperrt.
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1858
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Geöffnete Filehandles?
Danke, hat aber alles nicht geholfen.
Die Ursache ist, wenn die DLL mit der Option -gh (HeapTrace) compiliert wird.
Die Ursache ist, wenn die DLL mit der Option -gh (HeapTrace) compiliert wird.