AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Findfirst, FindNext und Serverlaufwerke
Thema durchsuchen
Ansicht
Themen-Optionen

Findfirst, FindNext und Serverlaufwerke

Offene Frage von "KarstenK"
Ein Thema von Kralle · begonnen am 5. Mär 2015 · letzter Beitrag vom 5. Mär 2015
Antwort Antwort
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
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Findfirst, FindNext und Serverlaufwerke

  Alt 5. Mär 2015, 13:10
Ich kann mich wage daran erinnern mal einen Thread gesehen zu haben wo auf das Server-Problem eingegangen wird,
finde den aber nicht wieder.
http://www.delphipraxis.net/182746-f...ml#post1279868
  Mit Zitat antworten Zitat
Kralle

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

AW: Findfirst, FindNext und Serverlaufwerke

  Alt 5. Mär 2015, 13:50
Hallo Günther,

Das ist auch wieder so ein Punkt bei dem ich die Hände über dem Kopf zusammen schlage.
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
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
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#4

AW: Findfirst, FindNext und Serverlaufwerke

  Alt 5. Mär 2015, 13:58
Ich kann mich wage daran erinnern mal einen Thread gesehen zu haben wo auf das Server-Problem eingegangen wird,
finde den aber nicht wieder.
Meinst Du eventuell diesen hier:
http://www.delphipraxis.net/183790-d...t-wie-ich.html
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
KarstenK

Registriert seit: 4. Dez 2007
Ort: Bärenthal
29 Beiträge
 
Delphi 2009 Enterprise
 
#5

AW: Findfirst, FindNext und Serverlaufwerke

  Alt 5. Mär 2015, 21:26
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.
  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 12:32 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