Autor Beitrag
JustusJonas
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 222



BeitragVerfasst: Di 14.12.04 11:22 
Hallo Leute,

hat jemand für mich ein wenig Quelltext oder zumindest einen Tipp?
Ich hab ein kleines Programm gemacht, das das aktuelle Verzeichnis nach Dateien durchsucht und diese in ein Zielverzeichnis verschiebt, falls verschiedene Kriterien zutreffen.
Bisher sieht das ganze so aus:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
if FindFirst (QuellPfad + FileMask, 0, sr) = 0 then
  begin

    if edtSize.Text = '' then
        begin
          CopyFile(PChar(QuellPfad + sr.Name), PChar(ZielPfad + sr.Name), False);
          DeleteFile(QuellPfad + sr.Name);
          mmLog.Lines.Add(GetDatum + ' - ' + GetTime + ': Datei ' + sr.Name + ' wurde verschoben');
        end;
  end;


while FindNext(sr) = 0 do
  begin
    if edtSize.Text = '' then
        begin
          CopyFile(PChar(QuellPfad + sr.Name), PChar(ZielPfad + sr.Name), False);
          DeleteFile(QuellPfad + sr.Name);
          mmLog.Lines.Add(GetDatum + ' - ' + GetTime + ': Datei ' + sr.Name + ' wurde verschoben');
        end;
  end;


Jetzt würde ich gerhe noch irgendwie einbauen, dass in den Unterverzeichnissen auch gesucht werden soll. Wie kann ich das machen? Habe hier schon einiges gefunden und auch in der Delphi-Hilfe. Es hat sicher was mit den Attr. zu tun, die faDirectory lauten müssen, aber ich komm einfach nicht drauf ich das programmiertechnisch umsetzen.

Kann mir jemand helfen?

Greetz
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Di 14.12.04 11:31 
Einfach nach faDirectory suchen und dann rekursiv in dem dann wieder nach Dateien.

AXMD
JustusJonas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 222



BeitragVerfasst: Di 14.12.04 11:38 
So weit war ich schon...mir fehlt nur der Quelltext wie ich den einbauen könnte!

Greetz
Grendel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 443

Gentoo Linux, MacOS X, Win 2000
D5 Ent, D7 Ent, Lazarus, Anjuta, MonoDevelop
BeitragVerfasst: Di 14.12.04 11:43 
JustusJonas hat folgendes geschrieben:
So weit war ich schon...mir fehlt nur der Quelltext wie ich den einbauen könnte!

Dann frag doch nicht, ob Dir jemand helfen könnte sondern direkt, ob Dir jemand den Quellcode schreibt.

Bis neulich ...
IngoD7
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 629


D7
BeitragVerfasst: Di 14.12.04 11:56 
Pseudo
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure DateienInAngegebenenOrdnerSuchen(Ordner, ...)
begin
while OrdnerNochNichtFertigDurchsucht do
  begin
  NächstenEintragBegutachten;
  if Eintrag = EinOrdner 
     then DateienInAngegebenenOrdenerSuchen(Eintrag, ...)
     else AndereArbeitenMitEintragDurchführen;
  ...
  end;
end;


Ist rekursiv, bestimmt nicht vollständig und jetzt nur so vom Prinzip!

Wie du auf das Attribut faDirectory testen kannst, steht in der Hilfe unter TSearchRec().
JustusJonas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 222



BeitragVerfasst: Di 14.12.04 12:11 
So findet er aber nichts bzw. gibt mir keine Ausgabe!

ausblenden Delphi-Quelltext
1:
2:
if FindFirst(QuellPfad, 0, sr) = 0 then
  if (sr.Attr AND faDirectory > 0) then ShowMessage('Verzeichnis: ' + sr.Name)


Greetz
Grendel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 443

Gentoo Linux, MacOS X, Win 2000
D5 Ent, D7 Ent, Lazarus, Anjuta, MonoDevelop
BeitragVerfasst: Di 14.12.04 12:21 
Setz den zweiten Parameter des FindFirst() mal auf "faAnyFile"

Bis neulich ...
IngoD7
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 629


D7
BeitragVerfasst: Di 14.12.04 13:32 
Grendel hat folgendes geschrieben:
Setz den zweiten Parameter des FindFirst() mal auf "faAnyFile"


Noch besser: Lies dir in der Hilfe bei FindFirst die Sache mit den Attributen durch und entscheide dann selbst.
Grendel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 443

Gentoo Linux, MacOS X, Win 2000
D5 Ent, D7 Ent, Lazarus, Anjuta, MonoDevelop
BeitragVerfasst: Di 14.12.04 13:39 
IngoD7 hat folgendes geschrieben:
Lies dir in der Hilfe bei FindFirst die Sache mit den Attributen durch...

Sach ma, wie kannst Du so unverschämt sein und verlangen, daß jemand selber in die Hilfe gucken soll.
Du könntest es ihm ja mindestens mal abschreiben und die relevanten Textstellen markieren. ;)

Bis neulich ...
JustusJonas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 222



BeitragVerfasst: Di 14.12.04 13:50 
Grendel hat folgendes geschrieben:
IngoD7 hat folgendes geschrieben:
Lies dir in der Hilfe bei FindFirst die Sache mit den Attributen durch...

Sach ma, wie kannst Du so unverschämt sein und verlangen, daß jemand selber in die Hilfe gucken soll.
Du könntest es ihm ja mindestens mal abschreiben und die relevanten Textstellen markieren. ;)

Bis neulich ...


Hallo mein Freund,

ich will dir mal kurz ein paar Worte erklären:
Wenn ich hier poste, dann ist das für mich persönlich mein letzter Ausweg, da ich mit der Hilfe oder bereits gefundenen Beiträgen nicht klarkomme. Wenn dann so ein Typ wie du schreibst ich könnte ja selbst nachgucken fühle ich mich schon ein wenig persönlich angegriffen, da du keine Ahnung hast was ich schon alles versucht habe!!
Also lass mich einfach mit deinen unnötigen Kommentaren in Ruhe, wenn du keine konstruktive Hilfe bieten kannst!

btw: Mit faAnyFile funktionierts auch nicht!

Greetz
MrSaint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: Di 14.12.04 13:58 
Hallo? wer hat dich hier angegriffen? also komm mal runter :)

IngoD7 hat folgendes geschrieben:
Noch besser: Lies dir in der Hilfe bei FindFirst die Sache mit den Attributen durch und entscheide dann selbst.


Ist wohl als ernstgemeinter Tipp anzusehen und nicht als Angriff. Und es gitb hier genug leute, die nicht wissen wie man die OH bedient und denen muss man dann eben sagen, dass es sowas gitb un dass sie da mal nachschauen sollen! IngoD7 wollte dich sicherlich nicht angreifen.

Grendel hat folgendes geschrieben:
IngoD7 hat folgendes geschrieben:
Lies dir in der Hilfe bei FindFirst die Sache mit den Attributen durch...

Sach ma, wie kannst Du so unverschämt sein und verlangen, daß jemand selber in die Hilfe gucken soll.
Du könntest es ihm ja mindestens mal abschreiben und die relevanten Textstellen markieren. ;)

Bis neulich ...


Und das ist wohl eher ironisch gemeint als ernst (-> Smiley). Das spielt eher auf die o.g. leute an, die die OH nicht kennen.


Also ganz cool :)



MrSaint

_________________
"people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
Grendel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 443

Gentoo Linux, MacOS X, Win 2000
D5 Ent, D7 Ent, Lazarus, Anjuta, MonoDevelop
BeitragVerfasst: Di 14.12.04 14:08 
JustusJonas hat folgendes geschrieben:
Hallo mein Freund,

Auch Dir mein Freund ein zünftiges Hallo :D

JustusJonas hat folgendes geschrieben:
ich will dir mal kurz ein paar Worte erklären:

Wenn ich hier poste, dann ist das für mich persönlich mein letzter Ausweg, da ich mit der Hilfe oder bereits gefundenen Beiträgen nicht klarkomme.

Aha. Und warum schreibst Du dann nicht konkret welcher Punkt der Hilfe Dir Verständnissprobleme bereitet?! Dann kann man auch über diesen konkreten Punkt reden bzw. zum Verständniss beitragen. Aber zu sagen, die Hilfe hilft nicht bitte liefert mir Lösungen finde ich irgendetwas zwischen lächerlich und unverschämt.

JustusJonas hat folgendes geschrieben:
Wenn dann so ein Typ wie du schreibst ich könnte ja selbst nachgucken fühle ich mich schon ein wenig persönlich angegriffen, da du keine Ahnung hast was ich schon alles versucht habe!!

Stimmt und Du hast Dir auch keine Mühe gemacht hier zu beschreiben, was Du alles schon versucht hast und woran es konkret scheitert. Hättest Du das nämlich getan hätte ich garantiert nicht den Eindruck gewonnen, daß hier jemand für sich denken lassen möchte.
Vielleicht tue ich Dir mit dieser Einschätzung Unrecht aber Deine Posts haben bei mir diesen Eindruck erweckt.

JustusJonas hat folgendes geschrieben:
Also lass mich einfach mit deinen unnötigen Kommentaren in Ruhe, wenn du keine konstruktive Hilfe bieten kannst!

Hilfe bieten könnte ich schon aber ich wenn ich das Gefühl habe, daß der Fragende nicht mitdenken will helfe ich grundsätzlich nicht.

JustusJonas hat folgendes geschrieben:
btw: Mit faAnyFile funktionierts auch nicht!

Dazu sage ich jetzt lieber nix mehr.

Bis neulich ...
IngoD7
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 629


D7
BeitragVerfasst: Di 14.12.04 14:19 
Ich gehe nicht davon aus, dass JustusJonas mich meinte. Ist aber auch wurscht.

Meinen Hinweis mit der OH unter FindFirst erhalte ich aufrecht. Dabei ist unerheblich, wie oft das schon gelesen (und meinetwegen nicht verstanden) wurde.

Anfangs stand im Code für das Attribut eine 0. Damit werden garantiert schonmal keine Ordner gesucht und gefunden. Ob das mit faAnyFile geht oder gehen müsste, weiß ich persönlich jetzt nicht. Aber nach Lesen der Hilfe käme zumindest ich auf die Idee, es direkt mit faDirectory zu versuchen.

Wenn das dann auch nicht geht, liegt es irgendwo am Programm. Kann man sich ja drüber unterhalten. Haben wir ja bisher noch wenig von gesehen.

Der Forderung von Grendel nach konkreten Fragen stimme ich im übrigen zu. Ein "geht auch nicht" bringt weder den Fragesteller, noch die Antwortgeber weiter.
IngoD7
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 629


D7
BeitragVerfasst: Di 14.12.04 14:31 
Und nochwas (jaja, zweites Posting hintereinander :roll: , aber der Tipp soll nicht in dem anderen Roman untergehen :wink: ):

Der Pfad - also bei dir im Code QuellPfad - ist auch gleichzeitig die Dateinamensmaske. Wenn da was falsches drin steht, findest du es alleine deswegen schon nicht (also ganz unabhängig von den Attributen).

Steht auch in der Hilfe an selber Stelle (habe ich eben auch erst nachgelesen).
JustusJonas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 222



BeitragVerfasst: Di 14.12.04 14:45 
Hi Leute,

sorry, wollte hier keine Unruhe stiften!
Bin nur ein wenig in Rage gekommen, als ich diesen Post gelesen habe.

Irgendwie versagen meine Programmierkenntnisse und dazu auch noch meine komplette Logik, komme irgendwie nicht mehr mit bei der ganzen Sache. Vielleicht bin ich deshalb ein wenig aufgebracht. Ich entschuldige hiermit auf jeden Fall bei euch! War überreagiert von mir und eigentlich sollte ich ja echt froh sein, dass ihr mir überhaupt helft.

Wie gesagt, aus der Hilfe werde ich einfach nicht mehr schlau, dir sagt mir nix Neues mehr, obwohl ich mir sicher bin, dass ich sie richtig bediene. Wie gesagt, hier scheitert es schon bei meiner Logik.

Was mache ich, wenn ich ein Directory gefunden habe? Dann muss ich ja diesen kompletten Inhalt noch mal durchsuchen...und wenn da noch eines drin ist!? Da tu ich mir echt ein wenig schwer. Ich weiß, das Zauberwort ist Rekursiv, aber bei sowas dreht sich alles in meinem Kopf! ;)

ausblenden Delphi-Quelltext
1:
2:
if FindFirst('C:\', faAnyFile, sr) = 0 then
    if (sr.Attr AND faDirectory > 0) then ShowMessage('Verzeichnis: ' + sr.Name)


Also mit diesem Code hier findet er überhaupt nichts und eine ShowMessage bleibt aus! :(

Ich poste euch mal meinen kompletten Programmcode, wie er im Moment ist, ok? Und ich will einfach nur, dass er nicht nur das aktuelle Verzeichnis durchsucht sondern auch alle Unterverzeichnisse!

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
procedure TfrmCinderella.btnDoClick(Sender: TObject);
var
FileMask, QuellPfad, ZielPfad, Vergleich      : String;
Size, Size2                                   : Integer;
begin
if edtExt.Text = '' then
  FileMask := '*.*'
  else
    FileMask := '*.' + edtExt.Text;

QuellPfad := edtQuelle.Text;
if edtZiel.Text = 'C:\' then ZielPfad := 'C:\';
ZielPfad := edtZiel.Text;

if edtSize.Text <> '' then
  Size := StrToInt(edtSize.Text)*1024;

if edtSize2.Text <> '' then
  Size2 := StrToInt(edtSize2.Text)*1024;

if edtSize2.Text = '' then edtSize2.Text := '0';

if cbSize.Text <> '' then
  Vergleich := edtSize.Text;

if FindFirst (QuellPfad + FileMask, 0, sr) = 0 then
  begin
    btnDo.Enabled := False;

    //Schreibschutz aufheben
    if (FileGetAttr(sr.Name) and faReadOnly) > 0
      then FileSetAttr(sr.Name, FileGetAttr(sr.Name) xor faReadOnly);

    if edtSize.Text = '' then
        begin
          CopyFile(PChar(QuellPfad + sr.Name), PChar(ZielPfad + sr.Name), False);
          DeleteFile(QuellPfad + sr.Name);
          mmLog.Lines.Add(GetDatum + ' - ' + GetTime + ': Datei ' + sr.Name + ' wurde verschoben');
        end;

    if cbSize.ItemIndex = 0 then
      if sr.Size < Size then
        begin
          CopyFile(PChar(QuellPfad + sr.Name), PChar(ZielPfad + sr.Name), False);
          DeleteFile(QuellPfad + sr.Name);
          mmLog.Lines.Add(GetDatum + ' - ' + GetTime + ': Datei ' + sr.Name + ' wurde verschoben');
        end;

    if cbSize.ItemIndex = 1 then
      if sr.Size > Size then
        begin
          CopyFile(PChar(QuellPfad + sr.Name), PChar(ZielPfad + sr.Name), False);
          DeleteFile(QuellPfad + sr.Name);
          mmLog.Lines.Add(GetDatum + ' - ' + GetTime + ': Datei ' + sr.Name + ' wurde verschoben');
        end;

    if cbSize.ItemIndex = 2 then
      if sr.Size = Size then
        begin
          CopyFile(PChar(QuellPfad + sr.Name), PChar(ZielPfad + sr.Name), False);
          DeleteFile(QuellPfad + sr.Name);
          mmLog.Lines.Add(GetDatum + ' - ' + GetTime + ': Datei ' + sr.Name + ' wurde verschoben');
        end;

    if cbSize.ItemIndex = 3 then
      if sr.Size <> Size then
        begin
          CopyFile(PChar(QuellPfad + sr.Name), PChar(ZielPfad + sr.Name), False);
          DeleteFile(QuellPfad + sr.Name);
          mmLog.Lines.Add(GetDatum + ' - ' + GetTime + ': Datei ' + sr.Name + ' wurde verschoben');
        end;

    if cbSize.ItemIndex = 4 then
      if sr.Size <= Size then
        begin
          CopyFile(PChar(QuellPfad + sr.Name), PChar(ZielPfad + sr.Name), False);
          DeleteFile(QuellPfad + sr.Name);
          mmLog.Lines.Add(GetDatum + ' - ' + GetTime + ': Datei ' + sr.Name + ' wurde verschoben');
        end;

    if cbSize.ItemIndex = 5 then
      if sr.Size >= Size then
        begin
          CopyFile(PChar(QuellPfad + sr.Name), PChar(ZielPfad + sr.Name), False);
          DeleteFile(QuellPfad + sr.Name);
          mmLog.Lines.Add(GetDatum + ' - ' + GetTime + ': Datei ' + sr.Name + ' wurde verschoben');
        end;
  end;


while FindNext(sr) = 0 do
  begin

    //Schreibschutz aufheben
    if (FileGetAttr(sr.Name) and faReadOnly) > 0
      then FileSetAttr(sr.Name, FileGetAttr(sr.Name) xor faReadOnly);

    if edtSize.Text = '' then
        begin
          CopyFile(PChar(QuellPfad + sr.Name), PChar(ZielPfad + sr.Name), False);
          DeleteFile(QuellPfad + sr.Name);
          mmLog.Lines.Add(GetDatum + ' - ' + GetTime + ': Datei ' + sr.Name + ' wurde verschoben');
        end;

    if cbSize.ItemIndex = 0 then
      if sr.Size < Size then
        begin
          CopyFile(PChar(QuellPfad + sr.Name), PChar(ZielPfad + sr.Name), False);
          DeleteFile(QuellPfad + sr.Name);
          mmLog.Lines.Add(GetDatum + ' - ' + GetTime + ': Datei ' + sr.Name + ' wurde verschoben');
        end;

    if cbSize.ItemIndex = 1 then
      if sr.Size > Size then
        begin
          CopyFile(PChar(QuellPfad + sr.Name), PChar(ZielPfad + sr.Name), False);
          DeleteFile(QuellPfad + sr.Name);
          mmLog.Lines.Add(GetDatum + ' - ' + GetTime + ': Datei ' + sr.Name + ' wurde verschoben');
        end;

    if cbSize.ItemIndex = 2 then
      if sr.Size = Size then
        begin
          CopyFile(PChar(QuellPfad + sr.Name), PChar(ZielPfad + sr.Name), False);
          DeleteFile(QuellPfad + sr.Name);
          mmLog.Lines.Add(GetDatum + ' - ' + GetTime + ': Datei ' + sr.Name + ' wurde verschoben');
        end;

    if cbSize.ItemIndex = 3 then
      if sr.Size <> Size then
        begin
          CopyFile(PChar(QuellPfad + sr.Name), PChar(ZielPfad + sr.Name), False);
          DeleteFile(QuellPfad + sr.Name);
          mmLog.Lines.Add(GetDatum + ' - ' + GetTime + ': Datei ' + sr.Name + ' wurde verschoben');
        end;

    if cbSize.ItemIndex = 4 then
      if sr.Size <= Size then
        begin
          CopyFile(PChar(QuellPfad + sr.Name), PChar(ZielPfad + sr.Name), False);
          DeleteFile(QuellPfad + sr.Name);
          mmLog.Lines.Add(GetDatum + ' - ' + GetTime + ': Datei ' + sr.Name + ' wurde verschoben');
        end;

    if cbSize.ItemIndex = 5 then
      if sr.Size >= Size then
        begin
          CopyFile(PChar(QuellPfad + sr.Name), PChar(ZielPfad + sr.Name), False);
          DeleteFile(QuellPfad + sr.Name);
          mmLog.Lines.Add(GetDatum + ' - ' + GetTime + ': Datei ' + sr.Name + ' wurde verschoben');
        end;

    if cbSize.ItemIndex = 6 then
      if (sr.Size > Size2) and ( sr.Size < Size) then
        begin
          CopyFile(PChar(QuellPfad + sr.Name), PChar(ZielPfad + sr.Name), False);
          DeleteFile(QuellPfad + sr.Name);
          mmLog.Lines.Add(GetDatum + ' - ' + GetTime + ': Datei ' + sr.Name + ' wurde verschoben');
        end;
  end;

mmLog.Lines.Add(GetDatum + ' - ' + GetTime + ': Vorgang beendet');
mmLog.Lines.Add('-----------------------------------------------------------------');
btnDo.Enabled := True;
end;


Hoffe ihr könnt damit mehr anfangen, sorry noch mal!

Greetz
IngoD7
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 629


D7
BeitragVerfasst: Di 14.12.04 14:53 
JustusJonas hat folgendes geschrieben:
Ich weiß, das Zauberwort ist Rekursiv, aber bei sowas dreht sich alles in meinem Kopf! ;)
Hat auch keiner gesagt, dass das leicht ist. :)

JustusJonas hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
2:
if FindFirst('C:\', faAnyFile, sr) = 0 then
    if (sr.Attr AND faDirectory > 0) then ShowMessage('Verzeichnis: ' + sr.Name)


Also mit diesem Code hier findet er überhaupt nichts und eine ShowMessage bleibt aus! :(


Erstmal dazu:
Siehe mein vorheriges Posting (war vielleicht noch nicht da, als du deines geschrieben hast).
Marlem
Hält's aus hier
Beiträge: 6


D5 Prof.
BeitragVerfasst: Di 14.12.04 15:08 
tach,

ich habe hier was:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
//Sucht nach Verzeichnissen Rekursiv
procedure SearchDirectories(Startdirectory,mask: string;var erg : TStringList);
var
  search: TSearchRec;
  directory: string;
begin
  // Unterverzeichnisse
  directory  := Startdirectory;
  directory := DirectorySlash(directory);
  if FindFirst(directory + '*.*', faDirectory, search) = 0 then
  begin
      repeat
      if ((search.Attr and faDirectory) = faDirectory) and (search.Name[1] <> '.') then begin
       if search.name = mask then
         begin
         erg.Add(directory + search.Name);
         end;
         SearchDirectories(directory+search.Name ,mask,erg);
         end;
      until FindNext(search) <> 0;
  end;
  FindClose(search);
end;
JustusJonas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 222



BeitragVerfasst: Mo 20.12.04 14:27 
Hi Leute,

ich bin's schon wieder. Sorry, hatte keine Zeit mehr seit letzter Woche um reinzuschauen.
Ich raffe es aber trotzdem irgendwie noch nicht so richtig.

Kann mir keiner sagen, wie ich das in meine schon bestehende Funktion einbauen kann, dass er auch noch die Unterverzeichnisse mitnimmt. Wie gesagt, stehe da leider irgendwie aufm Schlauch! :(

Greetz
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mo 20.12.04 16:23 
Also, so suche ich immer rekursiv nach Dateien
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
Procedure TForm1.Suche(pfad:string);
var sr : TSearchrec;
begin
    // sicherstellen, das kein \ am Ende ist
    if AnsiEndsStr('\', pfad) then
        pfad:=Copy(Pfad,1,length(pfad)-1);
    // Nach "normalen" Dateien suchen
    if findfirst(pfad+'\*',FaAnyfile,sr) = 0 then
    repeat
        if (sr.name<>'.') AND (sr.name<>'..') then
        begin
            //machwas mit dem File
        end;
    until Findnext(sr)<>0;
    findclose(sr);
    // Nach Unterordnern suchen
    if findfirst(pfad+'\*',FaDirectory,sr)=0 then
    repeat
        if (sr.name<>'.') AND (sr.name<>'..') then
            // in gefundenem Unterordner weitersuchen
            Suche(pfad+'\'+sr.name);
    until Findnext(sr)<>0;
    findclose(sr);
end;

Ich hoffe, das hilft etwas weiter.

_________________
We are, we were and will not be.