![]() |
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:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 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