AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

IsFileInUse ergibt immer "false"

Ein Thema von Maya · begonnen am 24. Sep 2012 · letzter Beitrag vom 25. Sep 2012
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Maya
Maya

Registriert seit: 15. Jun 2011
Ort: Potsdam-Mittelmark
107 Beiträge
 
Delphi 2010 Enterprise
 
#1

IsFileInUse ergibt immer "false"

  Alt 24. Sep 2012, 12:44
Delphi-Version: 2010
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:
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;
Fragen, Anregungen, Wünsche sind wie immer gern gesehen.

Interessanterweise, als ich die Zeile
Code:
if not FileExists(aDateiname) then Exit;
noch draußen hatte, ergab die Funktion grundsätzlich "true".
Status:
- FIAE
- Rechteinhaberin, ein Rüsselmops sein zu wollen
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#2

AW: IsFileInUse ergibt immer "false"

  Alt 24. Sep 2012, 12:52
Dann check doch mal, ob du jetzt nicht generell bei dem FileExists schon rausfliegst. Eventuell hast du noch ein Problem beim Dateinamen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: IsFileInUse ergibt immer "false"

  Alt 24. Sep 2012, 12:55
Eventuell hast du noch ein Problem beim Dateinamen.
Das sollte sich mit dem Debugger schnell herausfinden lassen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Maya
Maya

Registriert seit: 15. Jun 2011
Ort: Potsdam-Mittelmark
107 Beiträge
 
Delphi 2010 Enterprise
 
#4

AW: IsFileInUse ergibt immer "false"

  Alt 24. Sep 2012, 12:57
Dann check doch mal, ob du jetzt nicht generell bei dem FileExists schon rausfliegst. Eventuell hast du noch ein Problem beim Dateinamen.
Bei einer Datei, die ich NICHT aufhabe, beendet er die Funktion beim FileExists und gibt "false" zurück. Bei der Datei, die ich geöffnet habe in Excel, geht er ganz normal weiter in der Funktion und gibt ebenfalls "false" zurück.
Status:
- FIAE
- Rechteinhaberin, ein Rüsselmops sein zu wollen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: IsFileInUse ergibt immer "false"

  Alt 24. Sep 2012, 13:04
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: IsFileInUse ergibt immer "false"

  Alt 24. Sep 2012, 13:06
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;
Quelle

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
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Maya
Maya

Registriert seit: 15. Jun 2011
Ort: Potsdam-Mittelmark
107 Beiträge
 
Delphi 2010 Enterprise
 
#7

AW: IsFileInUse ergibt immer "false"

  Alt 24. Sep 2012, 13:14
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.
Bingo! Ich habe nicht die richtige Variable übergeben vom Dateinnamen. Danke dir!
Status:
- FIAE
- Rechteinhaberin, ein Rüsselmops sein zu wollen
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

AW: IsFileInUse ergibt immer "false"

  Alt 24. Sep 2012, 14:12
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
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#9

AW: IsFileInUse ergibt immer "false"

  Alt 24. Sep 2012, 16:46
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
oder

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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (24. Sep 2012 um 17:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: IsFileInUse ergibt immer "false"

  Alt 24. Sep 2012, 17:01
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
Und was ist mit dem Fall das Datei wegen fehlender NTFS-Rechte kein Zugriff erlaubt ist?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:15 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