AGB  ·  Datenschutz  ·  Impressum  







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

Prüfen, ob Ordner leer ist

Ein Thema von nezumi · begonnen am 26. Aug 2006 · letzter Beitrag vom 28. Aug 2006
Antwort Antwort
nezumi

Registriert seit: 20. Apr 2006
Ort: Berlin
56 Beiträge
 
#1

Prüfen, ob Ordner leer ist

  Alt 26. Aug 2006, 11:18
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?
nezumi
- Eddy the Eagle unter den Programmierern -
  Mit Zitat antworten Zitat
Benutzerbild von DeluxXx
DeluxXx

Registriert seit: 3. Jul 2006
92 Beiträge
 
#2

Re: Prüfen, ob Ordner leer ist

  Alt 26. Aug 2006, 11:49
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;
  Mit Zitat antworten Zitat
nezumi

Registriert seit: 20. Apr 2006
Ort: Berlin
56 Beiträge
 
#3

Re: Prüfen, ob Ordner leer ist

  Alt 26. Aug 2006, 11:59
Danke DeluxXx, werde ich so probieren.



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

Gruß,
nezumi
- Eddy the Eagle unter den Programmierern -
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Prüfen, ob Ordner leer ist

  Alt 26. Aug 2006, 12:22
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
nezumi

Registriert seit: 20. Apr 2006
Ort: Berlin
56 Beiträge
 
#5

Re: Prüfen, ob Ordner leer ist

  Alt 26. Aug 2006, 13:01
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ß,
nezumi
- Eddy the Eagle unter den Programmierern -
  Mit Zitat antworten Zitat
Benutzerbild von Daniel B
Daniel B

Registriert seit: 27. Okt 2005
Ort: Dachau
453 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Prüfen, ob Ordner leer ist

  Alt 26. Aug 2006, 13:25
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
Servus...
  Mit Zitat antworten Zitat
nezumi

Registriert seit: 20. Apr 2006
Ort: Berlin
56 Beiträge
 
#7

Re: Prüfen, ob Ordner leer ist

  Alt 26. Aug 2006, 14:19
Oh Gott!

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

Thanks all!
nezumi
- Eddy the Eagle unter den Programmierern -
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Prüfen, ob Ordner leer ist

  Alt 28. Aug 2006, 15:26
[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;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:47 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