![]() |
Delphi-Version: 2010
IsFileInUse ergibt immer "false"
Hallo ihr Lieben,
bei meinen aktuellen Projekt möchte ich ja CSV-Dateien in eine Datenbank einlesen. Klappt ja alles, aber ich möchte nun vorher abfragen, ob die Datei schon geöffnet ist oder nicht. Also gegoogelt und bin auf die Funktion ![]() Hier noch mal der Code aus meiner Unit:
Delphi-Quellcode:
Fragen, Anregungen, Wünsche sind wie immer gern gesehen. :)
function IsFileInUse(aDateiname: string): Boolean;
var hFile: THandle; begin Result:=False; if not FileExists(aDateiname) then Exit; hFile:=CreateFile(PChar(aDateiname), GENERIC_READ or GENERIC_WRITE or GENERIC_EXECUTE ,0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); Result:=hFile=INVALID_HANDLE_VALUE; if not Result then CloseHandle(hFile); end; Interessanterweise, als ich die Zeile
Code:
noch draußen hatte, ergab die Funktion grundsätzlich "true". :roll:
if not FileExists(aDateiname) then Exit;
|
AW: IsFileInUse ergibt immer "false"
Dann check doch mal, ob du jetzt nicht generell bei dem FileExists schon rausfliegst. Eventuell hast du noch ein Problem beim Dateinamen.
|
AW: IsFileInUse ergibt immer "false"
Zitat:
|
AW: IsFileInUse ergibt immer "false"
Zitat:
|
AW: IsFileInUse ergibt immer "false"
Hast Du Dir aDateiname einmal im Debugger angesehen? FileExists sollte ja theoretisch dasselbe zurückgeben, egal ob die Datei gerade geöffnet ist oder nicht.
|
AW: IsFileInUse ergibt immer "false"
Delphi-Quellcode:
function IsFileInUse(FileName: TFileName): Boolean;
var HFileRes: HFILE; begin Result := False; if not FileExists(FileName) then Exit; HFileRes := CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); Result := (HFileRes = INVALID_HANDLE_VALUE); if not Result then CloseHandle(HFileRes); end; ![]() In dem Torry Beispiel wird nur auf Read oder Write getestet. Wenn ein File ausführend geöffnet ist, kann es meines Wissen auch nicht beschrieben werden. ![]() Grüße Klaus |
AW: IsFileInUse ergibt immer "false"
Zitat:
|
AW: IsFileInUse ergibt immer "false"
Eigentlich müsste die Funktion IsFileInUse() ein dreiwertiges Ergebnis zurückliefern:
Code:
0=Datei vorhanden und nicht benützt
1=Datei vorhanden aber im Zugriff durch einen Prozess 2=Datei nicht vorhanden |
AW: IsFileInUse ergibt immer "false"
Zitat:
False=Datei vorhanden und nicht benützt True=Datei vorhanden aber im Zugriff durch einen Prozess Exception=Datei nicht vorhanden Aber man darf den Funktionsnamen nicht für bare Münze nehmen, denn dieses erkennt nicht alle Zugriffe (mindestens 0.000...1% werden nicht, da nicht alle Zugriffe über ein FileHandle arbeiten) |
AW: IsFileInUse ergibt immer "false"
Zitat:
|
AW: IsFileInUse ergibt immer "false"
Zitat:
|
AW: IsFileInUse ergibt immer "false"
Hilft Dir
![]() |
AW: IsFileInUse ergibt immer "false"
Wenn ein Programm eine Datei öffnet den Inhalt ausliest, in der GUI anzeigt und dann die Datei wieder schließt, dann wird der Dateiinhalt zwar angezeigt (landläufig auch als "Datei geöffnet" bezeichnet), aber die Datei ist nicht geöffnet.
Die Fragestellung sollte also eigentlich lauten: "Wie kann ich vor dem Öffnen der Datei feststellen, ob diese auch zum Lesen geöffnet werden kann (und weitere Schreiboperationen durch andere Programme verhindert werden)?" |
AW: IsFileInUse ergibt immer "false"
Zitat:
z.B. beim TMemo wird die "Datei" nur während LoadFromFile geöffnet, danach gleich wieder geschlossen und dann wird nur eine Kopie im Memo angezeigt. |
AW: IsFileInUse ergibt immer "false"
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz