Вниз
Скачать: CL | DM;

Поиск файлов   Найти похожие ветки 

 
Dot   (2006-01-05 18:30) [0]

Уважаемые мастера.
Нашел тут конструкцию для поиска файлов на диске.
все работает замечательно ищу все 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.


 
Anatoly Podgoretsky ©   (2006-01-05 18:46) [1]

Параметр StartD


 
Dot   (2006-01-05 18:49) [2]

спасибо, эт я знаю, в этом то и проблема как его поменять? на что?
буду очень признателен..
просто пытался и на "//" и на Мой компутер даже уж от бессилия =)


 
Джо ©   (2006-01-05 18:50) [3]

Задача разбивается на две:
1. Найти все логические диски. Или общие сетевые ресурсы.
2. Искать по каждому, последовательно перебирая.
Что непонятно-то?


 
Gero ©   (2006-01-05 19:05) [4]

> и на Мой компутер

На «Мой компутер» точно не стоит.


 
Almaz ©   (2006-01-06 00:40) [5]

Я так понимаю, что проблема именно в том, чтобы найти все логические диски. Для этого проще всего воспользоваться функцией 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.

Удачи.


 
Dot   (2006-01-08 13:07) [6]

Большое спасибо, разобрался



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.024 c
6-1129205876
Kimer
2005-10-13 16:17
2006.01.22
Отправка e-mail


14-1135328525
Дева
2005-12-23 12:02
2006.01.22
не понимаю! Как войти в форум под своим именем?


2-1136719337
Василий Алибабаевич
2006-01-08 14:22
2006.01.22
Какой символ "нет символа"?


14-1135478240
za Blender
2005-12-25 05:37
2006.01.22
Поддерживает ли Blender 2.40 русский язык?


14-1135551053
Kerk
2005-12-26 01:50
2006.01.22
Неманья Видич




   Наверх