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 Ordner leer ist (https://www.delphipraxis.net/75868-pruefen-ob-ordner-leer-ist.html)

nezumi 26. Aug 2006 11:18


Prüfen, ob Ordner leer ist
 
Hallo zusammen,

zum Schutz meiner privaten Daten speicher ich diese auf einer externen Festplatte (Laufwerksbuchstabe P:\), die ich immer abschalte, wenn ich online gehe. Damit ich das Abschalten nicht vergesse, habe ich ein kleines Prog geschrieben, welches gewährleistet, dass ich nur dann online gehen kann, wenn die externe Festplatte tatsächlich abgeschaltet ist, andernfalls bekomme ich einen Warnhinweis. Auf meinem Desktop befindet sich nur eine Verknüpfung zu diesem Prog.

Der Code ist simpel

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
if DirectoryExists('P:') then begin
Label1.Caption := 'LW abschalten!';
Label1.Visible := True
end else begin
ShellExecute(Handle, 'open', PChar('C:\Programme\T-Online\T-Online_Software_6\Basis-Software\Basis2\kernel.exe'), nil, nil, sw_Show);
Application.Terminate;
end;

end;
Nun möchte ich als zusätzliche Bedingung für den Start der Online-Verbindung festlegen, dass ein bestimmter Ordner, in dem ich private Daten zwischenspeichere (z.B. D:\Privat\), leer ist.

Kann mir bitte jemand sagen, mit welchem Befehl man dies prüft?

DeluxXx 26. Aug 2006 11:49

Re: Prüfen, ob Ordner leer ist
 
Ich wuerd es hiermit machen am schluss guckst du halt dann ob der slCurrent Count gleich 0 null wennm er größer als null ist enhält er ja Dateien ...
Delphi-Quellcode:
procedure FindFiles(DirStr,FN : string; slCurrent: TStringlist);
 var
 DirInfo: TSearchRec;
 R: integer;
 Mask,Dir : String ;
 begin
   Dir := includeTrailingpathDelimiter(Dirstr) ;
   try
     R := FindFirst(Dir+ FN, faAnyFile, DirInfo);
     while R = 0 do
     begin
       if ((DirInfo.Attr and faDirectory <> faDirectory) and (DirInfo.Name <> '.') and (DirInfo.Name <> '..') and (DirInfo.Attr and SysUtils.faVolumeID <> SysUtils.faVolumeID)) then
       begin
         slCurrent.Add(Dir + DirInfo.Name);
       end;
       R := FindNext(DirInfo);
     end;
   finally
     FindClose(DirInfo);
   end;
 end;

nezumi 26. Aug 2006 11:59

Re: Prüfen, ob Ordner leer ist
 
Danke DeluxXx, werde ich so probieren.

:bounce2:

(Ich hatte gehofft, es gibt irgendeine schlankere Möglichkeit)

Gruß,

Christian Seehase 26. Aug 2006 12:22

Re: Prüfen, ob Ordner leer ist
 
Moin DeluxXx,

ich würd's so machen:

Delphi-Quellcode:
function IsEmptyFolder(const AsFolder : string) : boolean;

var
  sr : TSearchRec;

begin
  Result := FindFirst(AsFolder+'\*.*',faAnyFile,sr) = 0;
  if not Result then exit;
  try
    Result := false;
    repeat
      if (sr.Attr and faDirectory) = faDirectory then begin // Verzeichnis?
        if (sr.Name <> '.') and (sr.Name <> '..') then exit; // "Echtes" Verzeichnis? => Nicht leer
      end else begin
        exit; // Datei => Nicht leer
      end;
    until FindNext(sr) <> 0;
    Result := true;
  finally
    FindClose(sr);
  end;
end;
Da mehrere aufeinander folgende Pfadtrenner (\) von Windows als einer angesehen werden, kann man sich die Verwendung von IncludeTrailingPathDelimiter sparen.
Ausserdem sollte man auch immer die Resourcenschutzblöcke (try/finally) verwenden.

Da . und .. Verzeichnisse sind brauchst Du in Deinem Falle auch nicht darauf zu testen, wenn es sich schon nicht um ein Verzeichnis handelt.

nezumi 26. Aug 2006 13:01

Re: Prüfen, ob Ordner leer ist
 
Hallo Christian,

danke erstmal für Deinen Vorschlag. Ehrlich gesagt versteh ichs nicht so ganz. Unklar ist mir vor allem (bei beiden Möglichkeiten), woher das Prog wissen soll, welcher Ordner geprüft wird.

Es soll ja nur bei einem ganz bestimmter Ordner (z.B. D:\Privat\) geprüft werden, ob er leer ist.

Wo teile ich das dem Programm denn mit??

Gruß,

Daniel B 26. Aug 2006 13:25

Re: Prüfen, ob Ordner leer ist
 
Das teilst du der Funktioon beim Aufruf mittels der AsFolder Stringkonstante.

Delphi-Quellcode:
function IsEmptyFolder(const AsFolder : string) : boolean; //<-------------

var
  sr : TSearchRec;

begin
  Result := FindFirst(AsFolder+'\*.*',faAnyFile,sr) = 0; //<---- Das dann hier benutzt wird

nezumi 26. Aug 2006 14:19

Re: Prüfen, ob Ordner leer ist
 
Oh Gott!

Vom-Schlauch-runtertret-und-kapier......
Habs ausprobiert. Funzt prima!

Thanks all!

himitsu 28. Aug 2006 15:26

Re: Prüfen, ob Ordner leer ist
 
[edit] dat alte war Mist (besser lesen sollte ._.)

Delphi-Quellcode:
// faVolumeID = 8

function IsEmptyFolder(const AsFolder : string) : boolean;

var
  sr : TSearchRec;

begin
  Result := FindFirst(AsFolder+'\*.*',faAnyFile,sr) = 0;
  if not Result then exit;
  repeat
    if (sr.Name <> '.') and (sr.Name <> '..') and (sr.Attr and faVolumeID = 0) then
    begin
      Result := false;
      Break;
    end;
  until FindNext(sr) <> 0;
  FindClose(sr);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:31 Uhr.

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 by Thomas Breitkreuz