Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Prüfen ob Datei von einem anderen Prozess verwendet wird (https://www.delphipraxis.net/111208-pruefen-ob-datei-von-einem-anderen-prozess-verwendet-wird.html)

Helmi 31. Mär 2008 16:05


Prüfen ob Datei von einem anderen Prozess verwendet wird
 
Hallo,

ich hab ein Programm zum Kopieren von Dateien.

Jetzt kann es aber sein, dass eine Datei gerade benutzt wird.
Dann kann ich Diese nicht kopieren.

Ich hab mir mal zu diesem Zeitpunkt den Systemfehler ausgelesen und
ich erhalte folgenden Hinweis:

Zitat:

Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird
Wie kann ich zuvor prüfen, ob die Datei von einem anderen Prozess
verwendet wird?

shmia 31. Mär 2008 16:15

re: Prüfen ob Datei von einem anderen Prozess verwendet wird
 
Zitat:

Zitat von Helmi
Wie kann ich zuvor prüfen, ob die Datei von einem anderen Prozess
verwendet wird?

Du kannst das prüfen, in dem du die Datei exklusiv öffnest. Sollte das misslingen, könnte ein anderer Prozess die Datei geöffnet haben.
Aber diese Prüfung ist grundsätzlich dumm (ungeschickt).
Denn was nützt es, wenn die Prüfung ergibt, dass die Datei frei ist und genau in diesem Augenblick ein anderer Prozess kommt und die Datei öffnet. Dann möchtest du die Datei kopieren -> Fehler.
Was ich damit sagen möchte: vergiss die Idee zu prüfen, kopier einfach die Datei und wenn es einen Fehler gibt, reagiere darauf. Du kannst z.B. dem Benutzer fragen
Code:
Datei xy kann nicht kopiert werden.
Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird
Abbrechen | Wiederholen | Ignorieren

Jeopardize 31. Mär 2008 16:34

re: Prüfen ob Datei von einem anderen Prozess verwendet wird
 
Sonst gibt es noch diese Methode:
http://www.delphi-treff.de/tipps/dat...isse/tipp/265/

rawsoul 31. Mär 2008 16:35

re: Prüfen ob Datei von einem anderen Prozess verwendet wird
 
Sollte durch das ändern des FileModes in einem Stream funktionieren. Etwa so:
Delphi-Quellcode:
var
  Stream: TFileStream;
  SRC: String;
begin
  SRC := 'C:\DeineDatei.txt';
  Stream := TFileStream.Create(SRC, fmShareDenyNone);
  {Irgendetwas damit tun - z.B. in eine Stringliste laden - über LoadFromStream}
  Stream.Free;
end;
Ob diese Methode aber sicher ist, weiß ich nicht. Die FileModes findest du ganz oben in der SysUtils.

//Edit: Tippfehler

Helmi 31. Mär 2008 17:03

re: Prüfen ob Datei von einem anderen Prozess verwendet wird
 
Hallo,

danke für eure Hilfe.

Das Kopieren wird in einem try-except-block durchgeführt.
Wenn jetzt eine Datei unkopierbar ist, weil sie von einem
Prozess momentan verwendet wird, dann lauf ich in den
except-teil und ich zeig eine Fehlermeldung an.

Also ich werte einen Fehler schon aus - nur hab ich mir halt
gedacht, es wäre schöner, wenn ich zuvor schon prüfen könnte
ob ich die Datei überhaupt kopieren kann.

himitsu 24. Apr 2008 14:59

re: Prüfen ob Datei von einem anderen Prozess verwendet wird
 
http://www.delphipraxis.net/internal...=732355#732355

oder über die DP-Suchfunktion: z.B.: Hier im Forum suchenisFileInUse, Hier im Forum suchenisFileOpen oder [dp]Datei geöffnet[/dp]

Aber wenn du genau nachließt, dann wirst du merken, daß es keinen einfachen und sicheren Weg gibt, um sowas zu prüfen.
Also um eine Fehlerprüfung wirst so oder so du nicht umherkommen.


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