![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск файлов [D7, WinXP]
Dot © (2006-01-05 18:30:00)Уважаемые мастера.
Нашел тут конструкцию для поиска файлов на диске.
все работает замечательно ищу все exe файлы и записываю их в файл
(writefile; это так для простоты написал чтобы не засорять основной код не обращайте свое внимание на это.. не в этом проблема)
Так вот процедуре мы задаем место начала поиска т.е. в нашем случает C:\
Вопрос: А как заставить проводить поиск файлов по всем дискам? и если можно то еще и по сетевым дискам?
P.S. кому интересно скажу (но давайте постараемся проявить снисходительность и обсуждать изначальный вопрос без лишнего флейма) - пишу поисковик для локалки
var
fndFile,fndFolder: WIN32_FIND_DATA;
procedure FindAndSave (const StartD: String);
var
hSRFile,hSRFolder: THandle;
begin
hSRFile := FindFirstFile(PChar(StartD+'*.EXE'),fndFile);
if hSRFile <> INVALID_HANDLE_VALUE then
begin
repeat
if (fndFile.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) =
FILE_ATTRIBUTE_DIRECTORY
then
Continue;
MessageBoxA(0,PCHar(StartD+fndFile.cFileName),nil,0);
WriteFile;
until not FindNextFile(hSRFile,fndFile);
Windows.FindClose(hSRFile);
end;
hSRFolder := FindFirstFile(PChar(StartD+'*.*'),fndFolder);
if hSRFolder <> INVALID_HANDLE_VALUE then
begin
repeat
if ((fndFolder.dwFileAttributes and
FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and
(fndFolder.cFileName <> '..') and (String(fndFolder.cFileName) <> '.')
then
FindAndSave(StartD+fndFolder.cFileName+'\');
until not FindNextFile(hSRFolder,fndFolder);
Windows.FindClose(hSRFolder);
end;
end;
begin
FindAndSave('C:\');
end.
Dot (2006-01-08 13:07:00) [1]Большое спасибо, разобрался
Almaz (2006-01-06 00:40:00) [2]Я так понимаю, что проблема именно в том, чтобы найти все логические диски. Для этого проще всего воспользоваться функцией
GetLogicalDrives, например так:
var
DriveNum: Integer;
DriveChar: Char;
DriveBits: set of 0..25;
begin
Integer(DriveBits) := GetLogicalDrives;
for DriveNum := 0 to 25 do
if DriveNum in DriveBits then
begin
DriveChar := Char(DriveNum + Ord('a'));
if GetDriveType(PChar(DriveChar + ':\')) in [DRIVE_FIXED..DRIVE_REMOTE] then
FindAndSave(DriveChar + ':\');
end;
end;
ФункцияGetDriveTypeслужит для определения типа диска - в данном примере будут добавлены только локальные жесткие диски и подключенные сетевые. Чтобы искать еще и на дискетах, CD-ROM'ах и т.п. см. справку поGetDriveType.
Удачи.
Gero (2006-01-05 19:05:00) [3]> и на Мой компутер
На «Мой компутер» точно не стоит.
Джо (2006-01-05 18:50:00) [4]Задача разбивается на две:
1. Найти все логические диски. Или общие сетевые ресурсы.
2. Искать по каждому, последовательно перебирая.
Что непонятно-то?
Dot (2006-01-05 18:49:00) [5]спасибо, эт я знаю, в этом то и проблема как его поменять? на что?
буду очень признателен..
просто пытался и на "//" и на Мой компутер даже уж от бессилия =)
Anatoly Podgoretsky (2006-01-05 18:46:00) [6]Параметр StartD