Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Feststellen ob eine Datei unbenutzt ist (https://www.delphipraxis.net/56055-feststellen-ob-eine-datei-unbenutzt-ist.html)

Helmi 31. Okt 2005 13:08


Feststellen ob eine Datei unbenutzt ist
 
Hallo,

wie kann ich feststellen, ob eine Datei, jeglicher Art, unbenutzt ist?

Bei den Schweizern gibt es zwar einen Code, aber ich musste schon feststellen,
dass dieser Code einmal funktioniert und einmal nicht - nicht zuverlässig!

Schweizer-Link

sh17 31. Okt 2005 13:27

Re: Feststellen ob eine Datei unbenutzt ist
 
Delphi-Quellcode:
function IsFileInUse(const FileName: String): 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;

Helmi 31. Okt 2005 13:30

Re: Feststellen ob eine Datei unbenutzt ist
 
na genau diesen code meinte ich ja, dass der nicht so richtig geht - siehe meinem posting und dem link

SirThornberry 31. Okt 2005 13:32

Re: Feststellen ob eine Datei unbenutzt ist
 
Der Source funktioniert schon, allerdings wird da nur versucht die Datei exclusiv zu öffnen. Wenn dies durch die bereits geöffnete instanz erlaubt ist komme aber auch kein Fehler.

sh17 31. Okt 2005 13:38

Re: Feststellen ob eine Datei unbenutzt ist
 
Und wenn die andere Instanz das zulässt, dann sollte es für Dich doch kein Problem sein. Die andere Instanz muss ja wissen, was sie macht. Du könntest ihr ja die Datei "unterm Hintern" weglöschen.

ichbins 31. Okt 2005 13:43

Re: Feststellen ob eine Datei unbenutzt ist
 
Du könntest ja einfach versuchen die File mit vollen schreibzugriffsrechten zu öffnen:
Delphi-Quellcode:
function fileinuse(filename:string):boolean;
var
  f:file;
begin
  result:=true;
  try begin
    assignfile(f,filename);
    filemode:=2;
    reset(f);
    result:=false;
    closefile(f);
  except end;
end;

Helmi 31. Okt 2005 13:46

Re: Feststellen ob eine Datei unbenutzt ist
 
Ich hab festgestellt, dass der Code bei mir ned so richtig funktioniert!

Ich kopiere in meinem Programm eine Datei von einem Rechner in einen Ordner eines anderen Rechners. Bevor ich dies aber mache, prüfe ich ob 1. schon diese Datei auf dem zweiten Rechner vorhanden ist und falls ja dann wird 2. geprüft ob diese Datei unbenutzt ist.
Dies mach ich eben mit dem oben stehenden Code, bzw. mit dem Code von den Schweizern (was ja der gleiche ist).

Ich stelle immer wieder fest, dass die function eine Datei als benutzt meldet, obwohl es aber möglich ist, diese Datei im Windows-Explorer ohne jegliche Probleme zu kopieren, bzw. zu überschreiben.

ichbins 31. Okt 2005 13:49

Re: Feststellen ob eine Datei unbenutzt ist
 
schau mal den Code, den ich geschrieben hab. Der überprüft einfach, ob die Datei für den Schreibzugriff geöffnet werden kann, egal an was es jetzt liegt, dass sie nicht geöffnet werden kann, ob sie nicht existiert, geöffnet ist usw...

Delphi-Quellcode:
function fileinuse(filename:string):boolean;
var
  f:file;
begin
  result:=true;
  try begin
    assignfile(f,filename);
    filemode:=2;
    reset(f);
    result:=false;
    closefile(f);
  except end;
end;

Helmi 31. Okt 2005 14:04

Re: Feststellen ob eine Datei unbenutzt ist
 
na ja - ich weiss nicht
die "Prüfung" auf eine Exception zu stützen
ob das so gut ist? :gruebel:

SirThornberry 31. Okt 2005 14:06

Re: Feststellen ob eine Datei unbenutzt ist
 
@Helmi: Dein Source macht doch auch nix anderes. Wenn die Datei nicht exlusiv geöffnet werden konnte wird 0 zurück gegeben was einem Fehler entspricht. Also wird da auch nur versucht ob etwas funktioniert ohne einen Fehler zu werfen


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 Uhr.
Seite 1 von 2  1 2      

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