Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поиск файлов [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


Наверх

Титульная страница Поиск, карта сайта Написать письмо