Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> поиск файла, поиск файла 
:(
    Опции темы
tupen050
Дата 10.11.2016, 05:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 10.11.2016

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



есть ли функция, метод для поиска файла по всем каталогам корневого диска(т.е. по всему компу) а не в одной папке?
PM MAIL   Вверх
feodorv
Дата 10.11.2016, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код
system( "find / -name xxx" )
???

Ну вот прямо как  вызов API, насколько я знаю, нет. Но ведь несложно реализовать самому  smile 


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
ovpmusic
Дата 12.11.2016, 09:56 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А, что, рекурсию не проходили???
Могу дать реализацию для 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;


Этот ответ добавлен с нового Винграда - http://vingrad.com
  Вверх
ovpmusic
Дата 12.11.2016, 09:56 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А, что, рекурсию не проходили???
Могу дать реализацию для 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;


Этот ответ добавлен с нового Винграда - http://vingrad.com
  Вверх
ovpmusic
Дата 12.11.2016, 09:56 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А, что, рекурсию не проходили???
Могу дать реализацию для 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;


Этот ответ добавлен с нового Винграда - http://vingrad.com
  Вверх
ovpmusic
Дата 12.11.2016, 09:56 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А, что, рекурсию не проходили???
Могу дать реализацию для 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;


Этот ответ добавлен с нового Винграда - http://vingrad.com
  Вверх
ovpmusic
Дата 12.11.2016, 09:56 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А, что, рекурсию не проходили???
Могу дать реализацию для 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;


Этот ответ добавлен с нового Винграда - http://vingrad.com
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




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


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

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