![]() |
Findfirst, FindNext und Serverlaufwerke
Moin,
ich suche mittels
Delphi-Quellcode:
nach betimmten Verezichnissen.
Procedure FindFiles (aPath, aFindMask: String; aWithSub: Boolean; aResult: tStrings);
Var FindRecord: tSearchRec; tempstr: String; Begin // Form1.StatusBar1.SimpleText:='Starte die Suche ...'; // // Quelle: http://www.entwickler-ecke.de/topic_nach+Dateien+suchen_1107,0.html // // Wenn die Stringliste nil ist oder aPath oder aFind nicht angegeben ist // dann raus If (aPath = '') or (aFindMask = '') or Not Assigned (aResult) Then Exit; // Wenn am Ende der Pfadangabe noch kein \ steht, dieses hinzufügen // (Oder die Funktion IncludeTrailingPathDelimiter aus der Unit SysUtils.pas verwenden) If aPath[Length (aPath)] <> '\' Then aPath := aPath + '\'; // Im aktuellen Verzeichnis nach der Datei suchen If FindFirst (aPath + aFindMask, faAnyFile, FindRecord) = 0 Then Repeat begin If (FindRecord.Name <> '.') and (FindRecord.Name <> '..') Then // ...Ergebnis in die Stringlist einfügen // Gesammter Zugriffspfad incl. Dateiname und Extention darf nicht länger als 160 Zeichen sein if (length(aPath + FindRecord.Name) > 160) and (Form1.CheckGroup1.Checked[0]=true) then Begin tempstr:= aPath + ','+ FindRecord.Name +',Zugriffpfad zu lang! Länge: '+InttoStr(length(aPath + FindRecord.Name))+' (max. 160)'; aResult.Add (tempstr); end; // Probleme bei der erneuten Archivierung if (length(aPath + FindRecord.Name)+40 > 160) and (Form1.CheckGroup1.Checked[4]=true) then Begin tempstr:= aPath + ','+ FindRecord.Name +',Erneute Archivierung nicht möglich!'; aResult.Add (tempstr); end; // Der Dateiname darf nicht länger als 32 Zeichen sein if (length(FindRecord.Name) > 32) and (Form1.CheckGroup1.Checked[3]=true) then Begin tempstr:= aPath + ','+ FindRecord.Name +',Projektname zulang! Länge: '+InttoStr(length(FindRecord.Name))+' (max. 32)'; aResult.Add (tempstr); //(aPath + FindRecord.Name); end; // Der Pfad darf nicht länger als 128 Zeichen sein if (length(aPath) > 128) and (Form1.CheckGroup1.Checked[2]=true) then Begin tempstr:= aPath + ','+ FindRecord.Name +',Projektpfad zulang! Länge: '+InttoStr(length(aPath))+' (max. 128)'; aResult.Add (tempstr); //(aPath + FindRecord.Name); end; // Es dürfen nur bestimmte Zeichen im Dateinamen sein if (HatStringSonderzeichen(KillExt(FindRecord.Name))) and (Form1.CheckGroup1.Checked[1]=true) then Begin tempstr:= FindRecord.Name +',Sonderzeichen im Projektnamen!!!'; aResult.Add (aPath+','+tempstr); //(aPath + FindRecord.Name); end; Form1.StatusBar1.SimpleText:='Suche ...'; Form1.StatusBar1.Refresh; end; Until FindNext (FindRecord) <> 0; SysUtils.FindClose (FindRecord); // Wenn nicht in Unterverzeichnissen gesucht werden soll dann raus If Not aWithSub Then Exit; // In Unterverzeichnissen weiter suchen If FindFirst (aPath + '*.*', faAnyFile, FindRecord) = 0 Then Repeat If (FindRecord.Name <> '.') and (FindRecord.Name <> '..') Then // Feststellen, ob es sich um ein Verzeichnis handelt If Boolean (FindRecord.Attr and faDirectory) Then // Funktion erneut aufrufen, um Verzeichnis zu durchsuchen (Rekursion) FindFiles (aPath + FindRecord.Name, aFindMask, aWithSub, aResult); Until FindNext (FindRecord) <> 0; SysUtils.FindClose (FindRecord); Form1.StatusBar1.SimpleText:='Die Suche ist Beendet'; End; Zuhause auf der lokalen Festplatte und auf dem NAS funktioniert es, aber auf der Arbeit auf dem Server nicht. Ich kann mich wage daran erinnern mal einen Thread gesehen zu haben wo auf das Server-Problem eingegangen wird, finde den aber nicht wieder. Das hat doch bestimmt etwas mit den Pfadtrennern oder so zu tun? Kann mir mal jemand eine Schubs in die richtige Richtung geben? Gruß Heiko |
AW: Findfirst, FindNext und Serverlaufwerke
Zitat:
![]() |
AW: Findfirst, FindNext und Serverlaufwerke
Hallo Günther,
Zitat:
Da wird embacardero mit Plattformunabhängigkeit usw. und dann kommen solche Funktionen nicht mal mit Serververzeichnissen zu recht und anstatt sich auf die Lösung des eigentlichen Problemes zu stürzen, muß man wieder alternative Funktionen suchen oder noch schlimmer - selber programmieren. Und so erfindet man ständig das Rad neu, aber es wird nicht runder dadurch, sondern nur ein weiteres Rad das wie die anderen nicht an das Auto passt. Gruß Heiko |
AW: Findfirst, FindNext und Serverlaufwerke
Zitat:
![]() |
AW: Findfirst, FindNext und Serverlaufwerke
Hallo,
Ich denke diese Zeile ist falsch If Boolean (FindRecord.Attr and faDirectory) Then ich nutze function EqualFileAttribute(SR: TSearchRec; FileAttrs: Integer): Boolean; begin Result := ((sr.Attr and FileAttrs) = (sr.Attr and $FF)); end; ansonsten mal log Einträge erzeugen, damit man sieht was falsch läuft. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:45 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-2025 by Thomas Breitkreuz