Einzelnen Beitrag anzeigen

Kralle

Registriert seit: 31. Okt 2004
Ort: Bremerhaven
349 Beiträge
 
Delphi XE7 Professional
 
#1

Findfirst, FindNext und Serverlaufwerke

  Alt 5. Mär 2015, 13:04
Moin,

ich suche mittels

Delphi-Quellcode:
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;
nach betimmten Verezichnissen.

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
OS: Linux Mint 20 Cinnamon (64-Bit), Windows 10 Professional, Delphi XE7 Pro SP1 +(Mobilpack & FireDAC), Lazarus 2.1 (Freepascal 3.3.1),
  Mit Zitat antworten Zitat