поиск файла

 
0
 
C++
ava
tupen050 | 10.11.2016, 05:52
есть ли функция, метод для поиска файла по всем каталогам корневого диска(т.е. по всему компу) а не в одной папке?
Ответы (2)
ava
feodorv | 10.11.2016, 23:12 #
system( "find / -name xxx" )
???

Ну вот прямо как  вызов API, насколько я знаю, нет. Но ведь несложно реализовать самому  :russian_ru 
ava
ovpmusic | 12.11.2016, 09:56 (Отредактирован 12.11.2016 09:57) #
А, что, рекурсию не проходили???
Могу дать реализацию для Delphi, с возможностью выбора: искать по всем папкам или нет. Скорость поиска очень высокая.
На C++, я думаю, сам переведешь...


procedure FileFinder(Path: string; maska: string; recur: boolean; sl: TStringList);

//Path  - путь поиска
//maska - маска поиска
//recur - true  - искать и в подкаталогах
//      - false - искать только в указанной папке
//sl    - список найденных файлов

var sr : TSearchRec;
begin
  if (Path[Length(Path)]='\') then SetLength(Path,Length(Path)-1);
  if FindFirst(Path+'\'+maska,faAnyFile,sr)=0 then
  begin
    if (sr.Attr or faDirectory)=sr.Attr then
      begin
        if (recur=true) then
        begin
          if (sr.name<>'.') and (sr.name<>'..') then
          FileFinder(path+'\'+sr.Name,maska,recur,sl);
        end
      end
    else
    sl.Add(Path+'\'+sr.Name);
    while FindNext(sr) = 0 do
    if (sr.Attr or faDirectory)=sr.Attr then
    begin
      if (recur=true) then
      begin
        if (sr.name<>'.') and (sr.name<>'..') then
        FileFinder(path+'\'+sr.Name,maska,recur,sl);
      end
    end
    else
    sl.Add(Path+'\'+sr.Name);
  end;
  FindClose(sr);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  Path: string;     // - путь поиска
  maska: string;    // - маска поиска
  recur: Boolean;   // - true  - искать и в подкаталогах
                    // - false - искать только в указанной папке
  sl: TStringList;  // - список найденных файлов
begin
  Application.ProcessMessages;
  Path:= Edit1.Text;
  maska:= Edit2.Text;
  sl:= TStringList.Create;
  if CheckBox1.Checked then begin
    recur:= True;
  end else begin
    recur:= False;
  end;
  FileFinder(Path,maska,recur,sl);
  sl.SaveToFile('sl.txt');
  ListBox1.Items.LoadFromFile('sl.txt');
end;
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
advanced
Отправить