2016-07-02 19 views
4

Ich versuche, eine Stringlist mit allen Ordnernamen in einem Verzeichnis zu füllen.Wie erhalten Sie Unterordnernamen eines Verzeichnisses, die auch Punkte im Namen enthalten?

Im Folgenden ein Auszug aus wie ich war in der Lage, dies zu tun:

var 
    SL: TStringList; 
    SearchAttr: LongInt; 
    SR: TSearchRec; 
begin 
    SL := TStringList.Create; 
    try 
    SearchAttr := (faDirectory); 

    if FindFirst(Directory + '\*.', SearchAttr, SR) = 0 then 
    begin 
     try 
     repeat 
      if (SR.Attr and faDirectory) <> 0 then 
      begin 
      if (SR.Name <> '.') and (SR.Name <> '..') then 
      begin 
       SL.Add(Directory + SR.Name); 
      end; 
      end; 
     until 
      FindNext(Sr) <> 0; 
     finally 
      FindClose(SR); 
     end; 
     end; 
    end; 

    // do something with string list folder names  
    finally 
    SL.Free; 
    end; 
end; 

Der übergeordnete Ordner, die ich zugreifenden 220 Vorhefte war enthalten aber die Routine nur wurde das Hinzufügen 216 Ordnernamen. Nach einigen Vergleichen und Debugging habe ich bemerkt, dass die 4 Ordnernamen, die nicht hinzugefügt wurden, Punkte in den Namen enthalten.

I Um zu testen, einen Ordner namens "Test Folder" erstellt und innerhalb I 9 weitere neue Ordner hinzugefügt genannt:

  • Ordner 1
  • Folder 2
  • Ordner 3
  • Ordner 4
  • Ordner 5
  • Ordner .6
  • Ordner 7
  • FOLDER 8
  • Ordner 9

Wenn "Test Folder" als das übergeordnete Verzeichnis verwenden, es fügt nur die folgenden Unterverzeichnisse:

  • Ordner 1
  • Ordner 2
  • Ordner 3
  • Ordner 4
  • Ordner 5
  • Ordner 7
  • Ordner 9

Ich habe mit SR.Name <> '.', SR.Name <> '..' und SR.Name[1] <> '.' usw. ohne Erfolg zu experimentieren.

Wie kann ich den Code ändern, um Ordnernamen mit Punkten im Namen zuzulassen und sie zu meiner Stringliste hinzuzufügen?

Dank

+2

Dank Mystery Downvoter schätzen es, zumindest geben Sie einen Grund, wenn Sie das Gefühl haben, Downvote. – Craig

+0

Ich verstehe den Downvote nicht. Dies ist eine gut geschriebene Frage, die alle Anforderungen erfüllt. –

+0

@KenWhite Danke, zum Glück bin ich nicht allzu besorgt darüber, wie viele Upvotes oder Downvotes ich bekomme, mein Hauptzweck dieser Seite ist es, als Entwickler zu lernen und zu wachsen und anderen zu helfen, wenn es möglich ist.Ich finde es einfach nervig, wenn Mystery-User es auf sich nehmen, andere User-Fragen zu verwerfen, ohne auch nur einen Grund oder etwas Konstruktives zu hinterlassen. Wenn eine Benutzerfrage schlecht ist, sollten Downvoters zumindest einen stichhaltigen Grund dafür geben und zumindest eine Gelegenheit für die Person bieten, ihre Frage usw. zu bearbeiten, anstatt darüber nachdenken zu müssen, was sie falsch gemacht haben. – Craig

Antwort

6

Ändern Sie den Suchbegriff aus '*.' zu '*'

Ihr Suchbegriff passt nur Objekte mit einer leeren Erweiterung. Sie möchten alle Objekte abgleichen, unabhängig davon, ob sie eine Erweiterung haben oder nicht.

+0

Danke, dass du den Fehler entdeckt hast, ich kann nicht glauben, dass ich das verpasst habe, jetzt fühle ich mich wirklich dumm - ich werde es einfach als schlechten Tag hinstellen und weitermachen;) – Craig