Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.22;
Скачать: 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 вся ветка

Текущий архив: 2006.01.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.052 c
2-1135847930
n0p
2005-12-29 12:18
2006.01.22
Application.CreateForm(TDataModule, DataModule);


1-1135073226
Фагот
2005-12-20 13:07
2006.01.22
как определить бездействие пользователя?


2-1135933519
ANB
2005-12-30 12:05
2006.01.22
Есть ли аналог IntToStr для LongWord ?


2-1136274898
g.town
2006-01-03 10:54
2006.01.22
BDE


2-1136105211
JemCarry
2006-01-01 11:46
2006.01.22
Проблемка с циклом