2016-07-02 2 views
4

Я пытаюсь заполнить список строк со всеми именами папок внутри каталога.Как получить имена подпапок в каталоге, которые также содержат точки в имени?

Ниже приводится выдержка, как я был в состоянии сделать это:

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; 

Родительской папка, которую я обратившийся содержит 220 вложенных папок, но процедура добавляла только 216 имен папок. После некоторых сравнений и отладки я заметил, что имена 4-х папок, которые не были добавлены, содержали точки в именах.

Для тестирования я создал папку под названием "Test Folder" и внутри я добавил еще 9 новых папок с именами:

  • папки 1
  • Папка 2
  • Папка 3
  • Папка 4
  • Папка 5
  • Папка .6
  • Папка 7
  • FOLDER 8
  • Папка 9

При использовании "Test Folder" в качестве родительского каталога, это только добавляет следующие подкаталоги:

  • Папка 1
  • Папка 2
  • Папка 3
  • Папка 4
  • Папка 5
  • Папка 7
  • Папка 9

Я экспериментировал с SR.Name <> '.', SR.Name <> '..' и SR.Name[1] <> '.' и т.д., но безуспешно.

Как изменить код, чтобы разрешить имена папок с точками в имени и добавить их в свой список строк?

Благодаря

+2

Спасибо, тайник, новичок в этом, цените его, по крайней мере, дайте повод, если вы чувствуете необходимость спускать вниз. – Craig

+0

Я не понимаю нисходящего. Это хорошо написанный вопрос, отвечающий всем требованиям. –

+0

@KenWhite спасибо, к счастью, я не слишком беспокоюсь о том, сколько у меня головок или вниз, моя главная цель использования этого сайта - учиться и расти как разработчик и помогать другим, когда это возможно.Я просто нахожу это довольно раздражающим, когда пользователи тайны берут на себя ответственность за то, что другие пользователи задают вопросы, даже не оставляя причин или ничего конструктивного. Если пользовательский вопрос плох, то downvoters должны хотя бы дать вескую причину, почему и, по крайней мере, дают возможность человеку редактировать там вопрос и т. Д., А не оставлять задуматься о том, что они сделали неправильно. – Craig

ответ

6

Изменить строку поиска из '*.' в '*'

Ваш поиск строки соответствует только объекты с пустым расширением. Вы хотите совместить все объекты, независимо от того, имеет ли они расширение.

+0

Спасибо за обнаружение ошибки, я не могу поверить, что я пропустил этот, теперь я чувствую себя действительно глупым - я просто поставлю его как плохой день и перейду;) – Craig

 Смежные вопросы

  • Нет связанных вопросов^_^