[gelöst] Geöffnete Filehandles?

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Benutzeravatar
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?

Beitrag von fliegermichl »

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
Zuletzt geändert von fliegermichl am Do 22. Okt 2026, 11:52, insgesamt 1-mal geändert.

Benutzeravatar
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?

Beitrag von Zvoni »

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
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.

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?

Beitrag von Soner »

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.

Benutzeravatar
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?

Beitrag von fliegermichl »

Danke, hat aber alles nicht geholfen.

Die Ursache ist, wenn die DLL mit der Option -gh (HeapTrace) compiliert wird.

Antworten