С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/19: Рейтинг темы: голосов - 19, средняя оценка - 4.68
 Аватар для zMaXz
2 / 2 / 0
Регистрация: 14.01.2011
Сообщений: 18

Не работает поиск файлов по маске

23.01.2011, 09:30. Показов 3757. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Народ, помогите!
Требуется найти все .exe файлы в папке. Использую FindFirst();
Delphi
1
2
3
4
while FindFirst('*.exe',faAnyFile,client)=0 do
 begin
 ////
 end;
Но такая конструкция не работает, работает только если я явно прописываю имя искомого файла.
В чём проблема?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.01.2011, 09:30
Ответы с готовыми решениями:

Поиск файлов по маске
Пытаюсь сделать поиск файлов в текущей директории, но вылазит 2 ошибки и не могу понять что с ней делать! Вот код:#pragma once ...

Поиск файлов по маске
Надо найти файлы по маске типа: 123456. txt, 1243567.txt, 56745.txt , 1123119.txt и т.д. Пробовал применять такую маску: .txt не...

Поиск файлов по маске
Всем доброго времени суток, подскажите, как осуществить поиск файлов по маске в связке c++ и Linux?

12
47 / 47 / 2
Регистрация: 21.01.2011
Сообщений: 151
23.01.2011, 10:07
Не удивительно, ведь написан бред.

Правильная конструкция (пример ищет все .exe файлы в папке Folder и выводит все найденные в TMemo):

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TForm1.Button1Click(Sender: TObject);
var
  SR: TSearchRec;
  Folder: String;
begin
  Folder := 'C:\Windows';
 
  Folder := IncludeTrailingPathDelimiter(Folder);
  if FindFirst(Folder + '*.*', faAnyFile, SR) = 0 then
  try
    repeat
      if ((SR.Attr and faDirectory) = 0) and                       // Файл, а не папка?
         SameFileName(ExtractFileExt(SR.Name), '.exe') then        // Расширение - exe?
        Memo1.Lines.Add(Folder + SR.Name);                         // Если да - добавляем
 
    until FindNext(SR) <> 0;
  finally
    FindClose(SR);
  end;
end;
0
 Аватар для zMaXz
2 / 2 / 0
Регистрация: 14.01.2011
Сообщений: 18
23.01.2011, 12:42  [ТС]
А почему нельзя прописать в FindFirst поиск не всех файлов(*.*), а только exe(*.exe)?
0
47 / 47 / 2
Регистрация: 21.01.2011
Сообщений: 151
23.01.2011, 12:44
Потому что.
0
 Аватар для zMaXz
2 / 2 / 0
Регистрация: 14.01.2011
Сообщений: 18
23.01.2011, 12:56  [ТС]
Спасибо, однако, всё равно не получается...
0
47 / 47 / 2
Регистрация: 21.01.2011
Сообщений: 151
23.01.2011, 12:59
Ошибка в 42 строке.
0
 Аватар для zMaXz
2 / 2 / 0
Регистрация: 14.01.2011
Сообщений: 18
23.01.2011, 13:02  [ТС]
Какая 42 строка???
Вот пример с сайта realcoding.net:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.Button1Click(Sender: TObject);
    var sr:TSearchRec;
    Result:word;
    begin
        ChDir('C:\windows');//меняем папку на C:\Windows
        Result := FindFirst ('*.exe',faAnyFile,sr);
        ListBox1.Clear;
        While result=0 do
    Begin
        Result:=FindNext (sr);
        ListBox1.Items.add(sr.name);
    End;
    end;
0
47 / 47 / 2
Регистрация: 21.01.2011
Сообщений: 151
23.01.2011, 13:05
Какая 42 строка???
Я не знаю какая. Какой вопрос - такой и ответ.

Если вы хотите, чтобы вам помогли с проблемой - для начала надо сказать, в чём заключается проблема.
0
 Аватар для zMaXz
2 / 2 / 0
Регистрация: 14.01.2011
Сообщений: 18
23.01.2011, 13:12  [ТС]
Ещё раз:
1. Использую такую конструкцию:
Delphi
1
2
3
4
5
6
result:=FindFirst('*.exe',faAnyFile,client);
while result=0 do
 begin
///////
 end;
 result:=findnext(client);
ПРОБЛЕМА: Не работает поиск файлов по маске *.exe.
Работает только так:
Delphi
1
2
3
4
5
6
result:=FindFirst('zzz.exe',faAnyFile,client);
while result=0 do
 begin
///////
 end;
 result:=findnext(client);
2. http://www.realcoding.net/article/view/133
Там ничего не говорится про короткие имена файлов и прочую...
Так понятнее?
0
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
24.01.2011, 10:03
zMaXz, предлагаю делать так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
procedure TForm1.Button1Click(Sender: TObject);
var
  Sr : TSearchRec;
  SPath : String;
begin
  //Путь к папке в которой лежит исполняемый файл программы.
  //Строка этого пути завершается слешем: '\'.
  //SPath := ExtractFilePath( Application.ExeName );
  
  //Путь к папке Windows извлекаем из переменной среды WinDir.
  SPath := GetEnvironmentVariable('WinDir');
  SPath := IncludeTrailingPathDelimiter(SPath);
 
  Memo1.Lines.Add('Папка: ' + SPath);
  try
    if FindFirst(SPath + '*.exe', faAnyFile, Sr) = 0 then repeat
      //Пропускаем папки.
      if (Sr.Attr and faDirectory) = faDirectory then Continue;
      //Имена файлов добавляем в Мемо.
      Memo1.Lines.Add(Sr.Name);
    until FindNext(Sr) <> 0;
  finally
    FindClose(Sr);
  end;
end;
Цитата Сообщение от zMaXz Посмотреть сообщение
Там ничего не говорится про короткие имена файлов и прочую
Про короткие имена CodeMonkey верное замечание сделал. Но в случае маски *.exe такой проблемы, вроде, нет.
0
 Аватар для zMaXz
2 / 2 / 0
Регистрация: 14.01.2011
Сообщений: 18
24.01.2011, 10:27  [ТС]
Огромное спасибо, вот это действительно даёт результат!
Delphi
1
2
SPath := GetEnvironmentVariable('WinDir');
  SPath := IncludeTrailingPathDelimiter(SPath);
Насчёт первой строки я понимаю, мы получаем путь по системной переменной, а вторая строка зачем?
0
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
24.01.2011, 12:56
Цитата Сообщение от zMaXz Посмотреть сообщение
а вторая строка зачем?
Вторая строка:
Delphi
1
SPath := IncludeTrailingPathDelimiter(SPath);
- добавляет разделитель в конце SPath, в случае, если его не было. Для Windows это разделитель: '\'.
В случае Windows это соответствует коду:
Delphi
1
2
3
4
5
6
7
var
  Len : Integer;
begin
...
  Len := Length(SPath);
  if (Len > 0) and (SPath[Len] <> '\') then SPath := SPath + '\';
...
1
47 / 47 / 2
Регистрация: 21.01.2011
Сообщений: 151
24.01.2011, 17:41
Цитата Сообщение от Mawrat Посмотреть сообщение
Но в случае маски *.exe такой проблемы, вроде, нет.
С чего бы это? Вполне есть. Создай в папке файлы 1.exe, 2.exec и 3.executable - сам и увидишь (*):

Code
1
2
3
4
C:\Test>dir *.exe /X
2011.01.24  17:37                 0              1.exe
2011.01.24  17:37                 0 2AA42~1.EXE  2.exec
2011.01.24  17:37                 0 301F7~1.EXE  3.executable
Особо феерично ты будешь ругаться, если удалишь таким макаром файлы по маске и зацепишь те, которые не хотел. Ну как, если не говно-кодом, называть после этого?

(*) При условии, что создание коротких имён файлов у тебя не отключено. По умолчанию короткие имена файлов включены на 32-х битных системах и выключены на 64-х битных.

---
Mawrat:
Цитата Сообщение от CodeMonkey Посмотреть сообщение
Особо феерично ты будешь ругаться, если удалишь таким макаром файлы по маске и зацепишь те, которые не хотел.
Это точно. Хотя..., я бы с радостью удалил файлы с такими расширениями: .exec и .executable.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.01.2011, 17:41
Помогаю со студенческими работами здесь

Поиск файлов по маске
Вот код который ищет директории var s:string; begin for s in TDirectory.GetDirectories('e:\','*z',TSearchOption(1)) do begin ...

Поиск файлов по маске
Имеется имя файла, например : файл.txt Как определить нет ли в папке таких же файлов, только с индексами, наприер: файл (1).txt , файл...

Поиск файлов по маске
Как реализовать поиск файлов по маске &quot;*.txt&quot;? Файлы могут быть в любой папке диска C: или даже D:

Поиск файлов по маске
Здравствуйте! Изучаю vba. Дали задание сделать поиск файлов по маске. Посмотрите пожалуйста, может что нибудь надо доработать. ФОрма ...

Поиск файлов по маске
Здрасте, у меня проблема с кодом. Он должен искать все файлы по маске xls, xlsx в той папке где лежит скрипт. Допустим в папке 4 файла: 1...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru