Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> поиск файлов по всему харду(по маске) 
:(
    Опции темы
ne0n
Дата 31.10.2005, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PlayBoy
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 5.8.2005
Где: Н.Новгород

Репутация: 1
Всего: 11



Ребята, проблема следующая:
есть у меня некая процедура назовем ее Counter(fileName : string);
Мне надо реализовать поиск файлов(mp3,ogg,avi итд) по всему жесткому диску,
но так что бы , программа выполняла мою процедуру с каждым найденным файлом!!!
Приветствуется любой вариант(особенно на Win Api)

Заранее спасибо!!!

PM MAIL ICQ   Вверх
Самурай
Дата 31.10.2005, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 20.10.2005
Где: Воронежская облас ть > Семилуки

Репутация: 1
Всего: 1



FindFirst() & FindNext().

Примеры использования данных функций можно найти на форуме, воспользовавшись поиском по "FindFirst" или "FindNext".

PM MAIL ICQ   Вверх
ne0n
Дата 31.10.2005, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PlayBoy
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 5.8.2005
Где: Н.Новгород

Репутация: 1
Всего: 11



FindFist() & FindNext() я зная как им ползоваться(поиск по известной дирректории),
главная сложность это осуществить поиск по всему харду и выполнение процедуры!!!
PM MAIL ICQ   Вверх
_hunter
Дата 31.10.2005, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



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


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
ne0n
Дата 31.10.2005, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PlayBoy
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 5.8.2005
Где: Н.Новгород

Репутация: 1
Всего: 11



Цитата(_hunter @ 31.10.2005, 18:57)
нет тут никакой сложности: пишеш рекурсивную функцию, принимающую полный путь к дирректории и вызываеш ее для корневой дирректории. в функции вызываеш саму-себя для каждой найденной дирректории...


а на примере можно?

PM MAIL ICQ   Вверх
Poseidon
Дата 31.10.2005, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Вот, держи
Код
function ScanDir(Dir:string): TStringList;
var SearchRec:TSearchRec;
begin
 Result:= TStringList.Create;

 if Dir<>'' then if Dir[length(Dir)]<>'\' then Dir:=Dir+'\';
 if FindFirst(Dir+'*.*', faAnyFile, SearchRec)=0 then
 repeat
 if (SearchRec.name='.') or (SearchRec.name='..') then continue;
 if (SearchRec.Attr and faDirectory)<>0 then
 ScanDir(Dir+SearchRec.name) 
 else
 Result.Add(Dir+SearchRec.name); 
 until FindNext(SearchRec)<>0;
 FindClose(SearchRec);
end;


procedure TForm1.Button1Click(Sender: TObject);
var
FList: TstringList;
i: integer;
begin
FLIst:= TstringList.Create;
FList.AddStrings(ScanDir('C:'));
FList.AddStrings(ScanDir('D:'));
// повторить со всеми дидисками

for i:= 0 to FList.Count-1 do
Counter(Flist.Strings[i]);

FList.Free;
end;


Это сообщение отредактировал(а) Poseidon - 31.10.2005, 19:01


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
ne0n
Дата 31.10.2005, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PlayBoy
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 5.8.2005
Где: Н.Новгород

Репутация: 1
Всего: 11



Poseidon спасибо за код( вроде должен подойти)
PM MAIL ICQ   Вверх
Самурай
Дата 31.10.2005, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 20.10.2005
Где: Воронежская облас ть > Семилуки

Репутация: 1
Всего: 1



Для получения всех дисков:
Код

var
 DriveChar: char;
begin
 for DriveChar:='A' to 'Z' do
  if GetDriveType(DriveChar + ':\') = DRIVE_FIXED
   then
    ScanDir(DriveChar +':')
end;

PM MAIL ICQ   Вверх
Albinos_x
Дата 31.10.2005, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Код

...
var
  Form1: TForm1;
  SearchRec:TSearchRec;
  l:boolean = false;   // для остановки поиска
...
procedure GetAllFilesOnHdds(var DFile, NFile, AFile : TStringList);
  procedure ScanDir(Dir:string);    
  // Поиск файлов
  var
    SearchRec:TSearchRec;
    r:string;
  begin
    if Dir<>'' then if Dir[length(Dir)]<>'\' then Dir:=Dir+'\';
    if FindFirst(Dir+'*.*', faAnyFile, SearchRec)=0 then
      repeat
      if (SearchRec.name='.') or (SearchRec.name='..') then Continue;
      if (SearchRec.Attr and faDirectory) <> 0 then
        ScanDir(Dir+SearchRec.name)
      else
        begin
         {Вот здесь мы можем делать с найденным файлом что угодно
          SearchRec.name - имя файла
          ExpandFileName(SearchRec.name) - имя файла с полным путем}
        r:=AnsiLowerCase(ExtractFileExt(dir+SearchRec.name));
        if (r='.mp3') or (r='.avi') or (r='.ogg') or (r='.rtf') then
           begin
           {здесь твои действия}
           end;
        end;
     Application.ProcessMessages;
     if l then Exit;
    until FindNext(SearchRec)<>0;
    FindClose(SearchRec);
  end;
var
  Drive: Char; // Буква диска    
  n: byte;
  lst:TStringList;
const
  pref = ':\';
begin
  lst:=TStringList.Create;
  lst.Clear;
  for Drive:= 'A' to 'Z' do
     if GetDriveType(PChar(Drive + pref)) = DRIVE_FIXED then
        lst.Add(Drive + pref);
      for n:= 0 to (lst.Count-1) do
          ScanDir(lst.Strings[n]);
    lst.Free;
end;


может это подойдёт... smile


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0781 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.