Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Status einer Datei überprüfen (https://www.delphipraxis.net/112602-status-einer-datei-ueberpruefen.html)

michi101200 24. Apr 2008 08:37


Status einer Datei überprüfen
 
Hallo,

wir kann ich herausfinden ob eine Datei noch kopiert wird?

Beispiel:
Wenn man eine 5GB Datei in einem Ordner kopiert (der Kopiervorgang geschieht nicht über die Applikation) dann dauert das ja ein bisschen :wink:
Wie kann ich dann überprüfen ob der Kopiervorgang schon beendet ist bzw. ob man auf die Datei Zugriff hat.

Die Überprüfung muss höchstwahrscheinlich über die API geschehen.

Ich hab schon mit FindFirstChangeNotification getestet aber das klappt nicht so wie ich das will :(

PS:
Sorry für den komischen Titel hab aber leider nichts passenderes gefunden

Luckie 24. Apr 2008 08:44

Re: Status einer Datei überprüfen
 
Zitat:

Zitat von michi101200
Sorry für den komischen Titel hab aber leider nichts passenderes gefunden

Wie wäre es mit: "Rausfinden wann eine Datei fertig kopiert wurde" :?

Und was hat mit FindFirstChangeNotification nicht funktioniert?

michi101200 24. Apr 2008 08:54

Re: Status einer Datei überprüfen
 
Wenn sich keine Datei in dem Ordner befindet, wird gesagt das eine drin ist

Hier ist mein Versuch:
Delphi-Quellcode:
  mHandle := FindFirstChangeNotification(PChar('E:\temp'),
        False,(FILE_ACTION_ADDED) and (not FILE_ACTION_REMOVED));
  if (mHandle = INVALID_HANDLE_VALUE) then begin
    exit;
  end;
  If WaitForSingleObject(Handle, 500) = WAIT_OBJECT_0 Then begin
    if (FindNextChangeNotification(mHandle)) then begin
      ShowMessage('Objekt ist vorhanden');
    end else begin
      ShowMessage('Objekt ist nicht vorhanden');
    end;
  end;
  FindCloseChangeNotification(mHandle);
Wie gesagt wenn keine Datei drin ist, dann kommt die Meldung Objekt ist vorhanden.

Aber ich muss auch ehrlich sagen, dass ich das ganze noch nicht recht verstehe.
Denn es ist auch die Frage wie ich den Dateiname bekomme.

DeddyH 24. Apr 2008 09:00

Re: Status einer Datei überprüfen
 
Ich würde einfach versuchen, die Datei exklusiv zu öffnen. Ist das nicht möglich, ist sie wahrscheinlich noch im externen Zugriff.

michi101200 24. Apr 2008 09:08

Re: Status einer Datei überprüfen
 
Das Problem ist wenn ich eine 5GB Datei habe und die vorher versuche exklusiv zu öffnen, dann dauert das doch lange und verbraucht viel Performance

soulies 24. Apr 2008 09:11

Re: Status einer Datei überprüfen
 
hi,

ich glaub hier im forum gibt es ne funktion 'IsFileInUse' oder so ...

vllt. wär die was

cya

michi101200 24. Apr 2008 09:18

Re: Status einer Datei überprüfen
 
Zitat:

ich glaub hier im forum gibt es ne funktion 'IsFileInUse' oder so ...
Das Problem ist das die Funktion bzw. ähnliche immer die Datei vorher exklusiv öffnen.

Gibt es denn evtl. eine andere Möglichkeit ohne dass man die vorher öffnen muss?
Wie gesagt kann sich dabei auch um eine 5GB Datei handeln und das muss "schnell" gehen.

DeddyH 24. Apr 2008 09:35

Re: Status einer Datei überprüfen
 
Schau Dir mal die FileFlags von CreateFile an. Man muss ja nicht die komplette Datei puffern.

shmia 24. Apr 2008 10:09

Re: Status einer Datei überprüfen
 
Zitat:

Zitat von michi101200
Das Problem ist wenn ich eine 5GB Datei habe und die vorher versuche exklusiv zu öffnen, dann dauert das doch lange und verbraucht viel Performance

Irrtum, das Öffnen einer Datei geht recht schnell; erst das Lesen grösserer Datenblöcke aus der Datei würde Zeit brauchen.

michi101200 24. Apr 2008 10:28

Re: Status einer Datei überprüfen
 
Zitat:

Schau Dir mal die FileFlags von CreateFile an.
Danke für den Tipp.

Zitat:

Irrtum, das Öffnen einer Datei geht recht schnell
Danke, klingt sogar logischer :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:18 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