Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2013, 16:42   #1
kholoshchak
Пользователь
 
Регистрация: 17.03.2011
Сообщений: 43
По умолчанию Поиск файлов

Всем добрый вечер. Нужна ваша помощь. Суть в следующем. Имеется процедура которая сканирует диск и выводит список файлов во всех каталогах и подкаталогах. Как сделать чтобы процедура сканировала не все каталоги, а пропускала такие как C:\Windows, C:\Program Files. Что для этого нужно сделать? За ранее спасибо.
kholoshchak вне форума Ответить с цитированием
Старый 11.11.2013, 16:44   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Видимо нужно в этой процедуре прописать условие невыполнения (ничего неделанья) если имя такое встретилось.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.11.2013, 16:55   #3
kholoshchak
Пользователь
 
Регистрация: 17.03.2011
Сообщений: 43
По умолчанию

Это понятно что условие. Я пробовал различные варианты условий, но программа все равно ищет файлы в этих директориях. Что еще придумать ума не хватает...
kholoshchak вне форума Ответить с цитированием
Старый 11.11.2013, 17:11   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

показывайте, что предумали))
Человек_Борща вне форума Ответить с цитированием
Старый 12.11.2013, 10:41   #5
kholoshchak
Пользователь
 
Регистрация: 17.03.2011
Сообщений: 43
По умолчанию

Вот мое приложение. Я пробовал присваивать пустое значение, если есть совпадение в path и удалять. В общем ничего не получается. Есть только вариант сделать ограничения при выводе в ListView, но это не вариант, так как директории все равно будут сканироваться и на них будет затрачиваться время. В общем у кого есть какие мысли, предложения, поделитесь.
Вложения
Тип файла: rar поиск файлов по маске.rar (207.9 Кб, 11 просмотров)
kholoshchak вне форума Ответить с цитированием
Старый 12.11.2013, 12:16   #6
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от kholoshchak Посмотреть сообщение
Вот мое приложение. Я пробовал присваивать пустое значение, если есть совпадение в path и удалять. В общем ничего не получается. Есть только вариант сделать ограничения при выводе в ListView, но это не вариант, так как директории все равно будут сканироваться и на них будет затрачиваться время. В общем у кого есть какие мысли, предложения, поделитесь.
А как вы думаете? 'C:\Wndows\System32' и 'c:\wndows\system32' это одно и то же строковое значение?
northener вне форума Ответить с цитированием
Старый 12.11.2013, 13:07   #7
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию

Как мне подсказали надо сравнивать через функцию SameText(str1, str2) в таких случаях. где не учитывается регистр так что попробуй использовать эту функцию.
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
IliaIT вне форума Ответить с цитированием
Старый 12.11.2013, 13:31   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

northener, +1

тогда уже пишите так:
Код:
if AnsiCompareText(path, 'c:\windows\system32\') = 0 then ....

кроме этого.
1) srec.Name='c:\windows\system32' then
это условие не выполнится НИКОГДА!


2) если нужен поиск по маске файла, то можно воспользоваться следующим примером (MatchesMask):
Код:
// чтобы работал if MatchesMask(... нужно в uses дописать Masks


procedure DirSearch(Dir: string; Mask : string; SL: TStrings);
var
  SearchRec: TSearchRec;
begin
  Dir := IncludeTrailingBackslash(Dir);

  if FindFirst(Dir + '*.*', faAnyFile, SearchRec) = 0 then
    repeat
      Application.ProcessMessages;

      if (SearchRec.Attr and faDirectory) <> 0 then begin
        if (SearchRec.name <> '.') and (SearchRec.name <> '..') then
                DirSearch(Dir + SearchRec.name, Mask, sl)
      end
      else
        if MatchesMask(ExtractFileName(SearchRec.Name), Mask) then
          Sl.Add(Dir + SearchRec.Name);
    until FindNext(SearchRec) <> 0;
  FindClose(SearchRec);
end;

...
// вызов, например, так:
  DirSearch('C:\TEMP', '*.AVI', Memo1.Lines);
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск файлов по маске и нахождения общего размера найденных файлов и вывод в терминал Колямбий Помощь студентам 0 21.04.2013 21:31
Поиск файлов liljon Win Api 8 06.08.2010 22:10
Поиск файлов LeoN Общие вопросы Delphi 5 25.11.2007 22:54
Поиск файлов necky Общие вопросы Delphi 10 31.08.2007 00:27