0 / 0 / 0
Регистрация: 15.03.2018
Сообщений: 6

Рекурсивный поиск файлов по заданным атрибутам

18.03.2018, 13:31. Показов 1386. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. У меня возникла проблема. Не получается сделать так, чтобы программа к примеру, искала файлы только по заданным атрибутам. Подскажите пожалуйста, как это осуществить?

Общая задача заключается в том что необходимо показать все файлы (не директории), исключая файлы с атрибутами: архивные, только для чтения, скрытые, системные. Не искать файлы в скрытых и системных директориях.


Вот мой код:
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
implementation
 
function At(attr:integer):string; 
var 
s:string; 
begin 
if (attr and faDirectory) <> 0 then s := 'D '; 
if (attr and faHidden) <> 0 then s := s+'H '; 
if (attr and faReadOnly) <> 0 then s :=s+ 'R ';
if (attr and faSysFile) <> 0 then s := s+ 'S ';
if (attr and faArchive) <> 0 then s :=s+ 'A ';
Result:= s; 
end;
 
{$R *.dfm}
 
 
Procedure ScanDir(StartDir: String; Mask:string; List:TStrings);
Var SearchRec : TSearchRec; 
Begin 
IF Mask ='' then Mask:= '*.*'; 
IF StartDir[Length(StartDir)] <> '\' then StartDir := StartDir + '\';
IF FindFirst(StartDir+Mask, faReadOnly  , SearchRec) = 0 then
Begin
Repeat
Application.ProcessMessages;
IF (SearchRec.Attr and faDirectory) <> faDirectory then // поиск осуществляется где-то здесь. К примеру я взял faReadOnly
List.Add(StartDir + SearchRec.Name+' '+At(SearchRec.Attr)) else
IF (SearchRec.Name <> '..') and (SearchRec.Name <> '.') then
Until FindNext(SearchRec) <> 0;
FindClose(SearchRec); 
End; 
end;
 
 
procedure TForm1.Button1Click(Sender: TObject);
var 
attr: Integer; 
s: string; 
begin
ListBox1.Items.Clear;
ScanDir('d:','',ListBox1.Items);
end;
 
 // g:\test
end.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.03.2018, 13:31
Ответы с готовыми решениями:

Поиск файлов в каталоге по определенным атрибутам
Информационная запись о файле содержит следующие поля: каталог, имя файла, расширение, дата и время создания, атрибуты «только для...

Организовать поиск файлов в директории по атрибутам текущей даты создания (день, месяц, год)
Задача, организовать поиск файлов в директории по атрибутам текущей даты создания (день месяц год) с возможностью перенаправления...

Рекурсивный поиск файлов
Была задача разработать простую функцию, которая по заданной маске ищет все возможные файлы в любой папке ну понятно. ФУнкция работает не...

3
Модератор
 Аватар для D1973
9845 / 6386 / 2451
Регистрация: 21.01.2014
Сообщений: 27,151
Записей в блоге: 3
18.03.2018, 16:22
Поставьте курсор на фразу FindFirst и нажмите F1... Пример, приведенный в справке Delphi вполне исчерпывающий...
0
0 / 0 / 0
Регистрация: 15.03.2018
Сообщений: 6
18.03.2018, 18:18  [ТС]
Вот. Что у меня получилось. Но нужно чтобы он искал это и в других папках. К примеру D:\work\test. А получается, что он находит только в папке work.
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
function At(attr:integer):string; 
var 
s:string;
begin 
if (attr and faDirectory) <> 0 then s := 'D '; 
if (attr and faHidden) <> 0 then s := s+'H '; 
if (attr and faReadOnly) <> 0 then s :=s+ 'R ';
if (attr and faSysFile) <> 0 then s := s+ 'S ';
if (attr and faArchive) <> 0 then s :=s+ 'A ';
Result:= s; 
end;
 
{$R *.dfm}
 
 
Procedure ScanDir(StartDir: String; Mask:string; List:TStrings);
Var SearchRec : TSearchRec;
Begin
IF Mask ='' then Mask:= '*.*';
IF StartDir[Length(StartDir)] <> '\' then StartDir := StartDir + '\';
IF FindFirst(StartDir+Mask, faAnyFile , SearchRec) = 0 then
Begin
Repeat
IF (SearchRec.Attr and faDirectory) <> faDirectory then
begin
IF (SearchRec.Attr and faReadOnly) = 1 then
List.Add(StartDir + SearchRec.Name+' '+At(SearchRec.Attr))
end
 else
IF (SearchRec.Name <> '..') and (SearchRec.Name <> '.') then
Until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
End;
end;
 
 
procedure TForm1.Button1Click(Sender: TObject);
var
attr: Integer;
s: string;
begin
ListBox1.Items.Clear;
ScanDir('d:','',ListBox1.Items);
end;
0
Модератор
 Аватар для D1973
9845 / 6386 / 2451
Регистрация: 21.01.2014
Сообщений: 27,151
Записей в блоге: 3
19.03.2018, 09:15
Цитата Сообщение от Worker2000 Посмотреть сообщение
Но нужно чтобы он искал это и в других папках
1. Перейти с Д7 на что-то, более новое и использовать функции модуля IOUtils
2. Пользоваться поиском
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.03.2018, 09:15
Помогаю со студенческими работами здесь

Рекурсивный Поиск файлов
Доброго всем времени суток, я к вам со следующей проблемой: необходимо разобраться с рекурсивным поиском файлов на всем компьютере...

Рекурсивный поиск файлов
Приветствую. Есть вот такая рабочая функция: function Scan($dir) { if (!preg_match(&quot;/\.$/&quot;,$dir)){ if (is_file($dir))...

Рекурсивный поиск файлов
Всем здравия. Недельку назад начал копать информацию про рекурсивный поиск, то ли я плохо ищу, то ли чего то не до понимаю, все что я...

Рекурсивный поиск файлов
Привет всем! Пишу программу, имеющую функционал поиска файлов по ключевым словам. Для начала написал программу, которая перебирала бы...

Рекурсивный поиск файлов
Доброго времени суток. Нужна помощь есть код который вполне подходит мне он ищет диски на компе потом в каждом диске ищет файлы по маске,...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

Новые блоги и статьи
Как украсить новогоднюю елку с Q# и Qiskit
EggHead 24.06.2025
Что может быть необычнее, чем применить законы квантовой механики для украшения новогодней елки? Пока другие развешивают обычные гирлянды, я решил объединить свою страсть к квантовым вычислениям с. . .
Системы нулевого доверия на C#
UnmanagedCoder 24.06.2025
Традиционная архитектура безопасности работает по принципу средневекового замка: создаём высокие стены вокруг корпоративной сети, укрепляем ворота межсетевыми экранами и системами обнаружения. . .
Снова не мой путь. Циклическое среднее, я обеими руками за проверку условия, в ракурсе данной задачи - циклическое среднее в топку.
Hrethgir 24.06.2025
Привет. Такой вопрос - нужно выводить среднее математическое между двумя направлениями, интервал значений которых может лежать в диапазоне одного оборота по кругу. Проблема заключается в том, что. . .
Деплой Flask приложения
py-thonny 23.06.2025
За годы работы с Flask я натыкался на одни и те же грабли достаточно часто, чтобы наконец научится их обходить. И сегодня хочу поделится опытом, который сбережет вам немало нервных клеток. Начнем с. . .
WebAssembly и контейнеры в .NET Aspire для оркестрации распределенных архитектур
ArchitectMsa 23.06.2025
Я наблюдаю, как WebAssembly (или просто WASM) постепенно выходит за рамки своего первоначального предназначения — исполнения кода на стороне браузера. Теперь эта технология проникает в серверную. . .
Непрерывная интеграция для пакета Python
Mr. Docker 22.06.2025
Было 4 часа утра пятницы, когда я выпустил новую версию нашей внутренней библиотеки для обработки данных. Релиз 0. 5. 2 содержал небольшой фикс для обработки дат в ISO формате, что может пойти не так?. . .
Продвинутый ETL на C# из OLTP БД в хранилище
stackOverflow 22.06.2025
Работая в сфере корпоративной аналитики, я постоянно сталкиваюсь с одним и тем же - нужны чистые, структурированные и, главное, свежие данные. Без них современные аналитические системы, машинное. . .
Мастер-класс по микросервисам на Node.js
Reangularity 21.06.2025
Node. js стал одной из самых популярных платформ для микросервисной архитектуры не случайно. Его неблокирующая однопоточная модель и событийно-ориентированный подход делают его идеальным для. . .
Управление Arduino из WPF приложения
Wired 21.06.2025
Зачем вообще связывать Arduino с WPF-приложением? Казалось бы, у Arduino есть собственная среда разработки, своя экосистема, свои способы управления. Однако при создании серьезных проектов. . .
Звёздная пыль
kumehtar 20.06.2025
Я просто это себе представляю: как создавался этот мир. Как энергия слипалась в маленькие частички. Как они собирались в первые звёзды, как во вселенной впервые появился Свет. Как эти звёзды. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru