Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Рекурсивный поиск файла

Ответить
Настройки темы
[решено] Рекурсивный поиск файла

Новый участник


Сообщения: 31
Благодарности: 1

Профиль | Отправить PM | Цитировать


Изменения
Автор: cra5h_
Дата: 20-01-2010
Поиск файла выполняется при помощи функции, и выполняется очень долго. Возможно ли реализовать поиск файла в каталогах и подкаталогах другим способом - более быстрым?

Код: Выделить весь код
Func _FindFiles($sRoot, $sFile)
  Local $FileList
  $FileList = _FileListToArray($sRoot, $sFile, 1)
       If Not @error Then
   For $i = 1 To $FileList[0]
      $filename2 = StringMid($Filelist[$i],StringInStr($Filelist[$i],"\",0,-1)+ 1)
            MsgBox(64,"",$filename2)
   Next
      EndIf
    $FileList = _FileListToArray($sRoot, '*', 2)
     If Not @error Then
         For $i = 1 To $FileList[0]
           _FindFiles($sRoot & '\' & $FileList[$i], $sFile)
         Next
    EndIf
EndFunf
попробовал такой поиск но по скорости поиска почти одинаковы
Код: Выделить весь код
Func FileSearch($sPath, $sFileSrh) ;путь к каталогу и имя файла 
    Local $sFile, $Search, $sRes = "" 
    While 1 
        $Search = FileFindFirstFile($sPath & "\" & $sFileSrh) 
        If @error Then Return "" 
        While 1 
            $sFile = FileFindNextFile($Search) 
            If @error Then ExitLoop 
            $sFile = $sPath & "\" & $sFile 
            If StringInStr(FileGetAttrib($sFile), "D") > 0 Then ContinueLoop 
            $sRes = $sFile 
            MsgBox(64,"",$sRes)

        WEnd 
        FileClose($Search) 
        $Search = FileFindFirstFile($sPath & "\*.*") 
        If @error Then ExitLoop 
        While 1 
            $sFile = FileFindNextFile($Search) 
            If @error Then ExitLoop 
            $sFile = $sPath & "\" & $sFile 
            If StringInStr(FileGetAttrib($sFile), "D") = 0 Then ContinueLoop 
            $sRes = FileSearch($sFile, $sFileSrh) 
            If $sRes <> "" Then ExitLoop 2 
        WEnd 
        ExitLoop 
    WEnd 
    FileClose($Search) 
    Return $sRes 
EndFunc
файлов около 5000 и больше в 50 папках

Можно ли организовать поиск файла через WinAPI?
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:37, 20-01-2010

 

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата asdf8:
Интересно - можно еще быстрее? »
второй прогон можно, если результат первого сохранить в файл...

Отправлено: 12:47, 22-01-2010 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 27
Благодарности: 11

Профиль | Отправить PM | Цитировать


Цитата Creat0R:
Сарказм? »
Конечно нет.
Есть программка FindOnClick, которая ищет файлы на порядок быстрее всего того, что я вообще видел.
Думал, может кто знает, как?

Отправлено: 13:58, 22-01-2010 | #22


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


Присоединяюсь к вопросу asdf8.
FindOnClick действительно очень быстро ищет файлы.

Отправлено: 14:40, 22-01-2010 | #23


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Вам нужна скорость, покурите функций _FileListToArray* из темы на оф. форуме: Improvement of included _FileListToArray function
Там было предложено немало хороших улучшений.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:56, 22-01-2010 | #24


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата asdf8:
Есть программка FindOnClick, которая ищет файлы на порядок быстрее всего того, что я вообще видел. »
Ну вообще то она поддерживает командную строку, думает будет не сложно использовать её в качестве "поисковика"?

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 18:34, 22-01-2010 | #25


Аватара для timsky

Новый участник


Сообщения: 46
Благодарности: 10

Профиль | Отправить PM | Цитировать


Windows 7 x64 Ultimate. Поиск @WindowsDir, "*.*":

Вариант asdf8 из этого поста 17590 мсек и находит 66247 файлов.

Вариант Creat0R из этого поста 3828 мсек и находит 81241 файлов.


TotalCommander 7.50a (включено отображение скрытых файлов) находит 64237 файлов и 14557 папок за 34 секунды.
ViewFD 2.4.3.0 (дефолтовые опции) находит 64240 файлов за 2 секунды.

Проводник 76757 объектов
При включенном отображении скрытых файлов - 76908
При включенном отображении скрытых и системных файлов - 77054

SearchMyFiles 1.37 от NirSoft.net - 64243 файла и 14525 папок.


ЗЫ: тестил в таком же порядке, в котором отписал.

Отправлено: 19:03, 22-01-2010 | #26


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата timsky:
Вариант asdf8 из этого поста 17590 мсек и находит 66247 файлов.
Вариант Creat0R из этого поста 3828 мсек и находит 81241 файлов. »
Мой вариант ищет все файлы, включая скрытые, только для чтения, архивные и системные.

Цитата timsky:
тестил в таком же порядке, в котором отписал »
Но эти тесты почти ничего не показывают, т.к поиск возвращает разное количество файлов.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 20:23, 22-01-2010 | #27


Аватара для timsky

Новый участник


Сообщения: 46
Благодарности: 10

Профиль | Отправить PM | Цитировать


Цитата Creat0R:
Но эти тесты почти ничего не показывают, т.к поиск возвращает разное количество файлов. »
Я и ничего не пытался доказать.

Просто заметил, что файловые менеджеры и SearchMyFiles возвращают примерно одинаковое кол-во файлов (м/у запусками немного различается), твой вариант выдает больше всего файлов, а вот вариант asdf8 как-то не вписывается в общую картину.
У проводника Виндовс вообще свои соображения на сей счет, только ему известные.

Отправлено: 03:07, 23-01-2010 | #28


Аватара для Sp01LeR

Пользователь


Сообщения: 60
Благодарности: 13

Профиль | Отправить PM | Цитировать


По моим наблюдениям, самый быстрый поиск файлов, это поиск напрямую через файловую систему раздела - такая функция есть у большинства продвинутых утилит для востановления удаленных(поврежденных) файлов, правда по скорости чтения они тоже показывают разные результаты...

Отправлено: 22:04, 24-01-2010 | #29


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


Creat0R,
Цитата Creat0R:
$iPID = Run(@ComSpec & ' /C ChCp 1251 & Dir "' & $sPath & '\' & $sFileMask & '" /S /B /A RASH', @SystemDir, @SW_HIDE, 6) »
У меня не работает.
На скриншоте ˜Ё«®ў - это юзер русскими буквами, ђ*Ў®зЁ© бв®« - Рабочий стол.
Почему, не понятно?

Последний раз редактировалось madmasles, 05-03-2010 в 13:25.


Отправлено: 19:12, 04-02-2010 | #30



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Рекурсивный поиск файла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Поиск файла на компьютере sashadeg AutoIt 12 30-01-2010 18:40
Разное - [решено] Поиск по типу файла 7human7 Microsoft Windows 7 2 25-11-2009 09:51
Интерфейс - [решено] Быстрый поиск TEMA5 Microsoft Windows 7 7 07-10-2009 20:42
CMD/BAT - [решено] Как скопировать имя файла из текстового файла в код батника и т.д. Nun-Nun Скриптовые языки администрирования Windows 6 13-05-2009 13:28
Разное - [решено] поиск файлов zai Microsoft Windows 2000/XP 20 07-10-2007 14:18




 
Переход