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 Ist eine Datei in Benutzung vom Delphi-Treff gestoßen. Das Einpflegen war ja nicht das Prob, aber nun zeigt er bei mir generell an, dass die Datei nicht in Benutzung ist. Problem an der Sache ist ja natürlich, wenn die Datei im Hintergrund aber geöffnet ist, z.B. per Excel, beim Lesen der Datei eine Fehlermeldung kommt. -.- 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:
Quelle
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. Hier ist noch ein anderes Beispiel zu finden. 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 06:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz