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

Компьютерный форум 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

 

Аватара для Creat0R

Must AutoIt


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

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


Цитата madmasles:
Объясните, пожалуйста, про ключ /U . В справках ничего про него не нашел »
Набери в «Выполнить» (Win+R):

Код: Выделить весь код
cmd.exe /?

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

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

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

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

Отправлено: 12:50, 05-02-2010 | #41



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

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


Аватара для Sp01LeR

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


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

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


вобще-то в консоли можно задать почти любую кодировку:

Код: Выделить весь код
"cmd.exe chcp 65001" (utf-8)
"cmd.exe chcp 65000" (utf-7)
"cmd.exe chcp 28595" (ISO-8859-5 - кирилица)
"cmd.exe chcp 20866" (KOIR-8 - русская)
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:49, 05-02-2010 | #42


Аватара для Creat0R

Must AutoIt


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

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


Цитата Sp01LeR:
в консоли можно задать почти любую кодировку »
Почитай предыдущую страницу

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

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

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


Отправлено: 15:20, 05-02-2010 | #43


Аватара для Sp01LeR

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


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

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


Цитата Creat0R:
Почитай предыдущую страницу »
читал, но подумал, что такая проблема только у батника - теперь понял, что в STDOUT буфер всеравно идет в OEM-кодировке...

Отправлено: 17:12, 05-02-2010 | #44


Googler


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

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


Цитата Sp01LeR:
в STDOUT буфер всеравно идет в OEM-кодировке »
разве только сменить кодировку по умолчанию...
Разное - [решено] Сбилась кодировка командной строки

Отправлено: 18:39, 05-02-2010 | #45


Аватара для Sp01LeR

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


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

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


amel27, у меня этих проблем с ветками в реестре не было - chсp выдавало кодовую страницу 866...

изменив значение параметра "CodePage" на "4e3" (кодовая страница 1251) AutoIT берет с буфера STDOUT вместо OEM - ANSI!!!
Потом проверял с поменяв значение на "fde9":
и на MsgBox() и на записи в файл в кодировке ANSI - выводит знакомые ютээфовские крякозяблы типа

Код: Выделить весь код
Содержимое
PS: и еще, в том топике утверждали, что после создания параметра "CodePage" нужно ребутнуть винду - но у меня все работает и без перезагрузки...

Последний раз редактировалось Sp01LeR, 05-02-2010 в 21:14.


Отправлено: 21:01, 05-02-2010 | #46


Googler


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

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


Цитата Sp01LeR:
изменив значение параметра "CodePage" на "4e3" (кодовая страница 1251) AutoIT берет с буфера STDOUT вместо OEM - ANSI!!! »
главное, не забыть вернуть обратно... а то будет как в указанном топике...

Цитата Sp01LeR:
в том топике утверждали, что после создания параметра "CodePage" нужно ребутнуть винду - но у меня все работает и без перезагрузки »
для наших задач перезагрузки не треба...

Отправлено: 05:08, 06-02-2010 | #47


Ветеран


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

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


У меня работало так (относительно требования перезагрузки):
читать дальше »
1) после установки значения параметра:
Код: Выделить весь код
[HKEY_CURRENT_USER\Console]
"Codepage"=dword:000004e3
и запуска cmd.exe, «chcp» выдавало положенное «Текущая кодовая страница: 1251»;
2) после удаления параметра «HKEY_CURRENT_USER\Console\Codepage» и запуска cmd.exe, «chcp» выдавало всё то же «Текущая кодовая страница: 1251»;
3) после установки значения параметра:
Код: Выделить весь код
[HKEY_CURRENT_USER\Console]
"Codepage"=dword:00000362
и запуска cmd.exe, «chcp» выдавало положенное «Текущая кодовая страница: 866»;
4) после удаления параметра «HKEY_CURRENT_USER\Console\Codepage» и запуска cmd.exe, «chcp» продолжало выдавать «Текущая кодовая страница: 866».

То бишь, перезагрузка (а, правильнее, — завершение сеанса) требуется для того, чтобы вернуть умолчальную кодовую страницу 866 в том случае, когда в «HKEY_CURRENT_USER\Console» (ну, или в соответствующей файлу приложения ветви реестра, например, «%SystemRoot%_system32_cmd.exe») после удаления отсутствует параметр «Codepage».

Похоже на то, что в случае удаления параметра «Codepage» берётся последнее прочитанное оттуда и запомненное значение (2-й и 4-й рассмотренные выше этапы). Так что, вместо завершения сеанса достаточно после экспериментов добавить соответствующий кодовой странице «866» параметр «Codepage», запустить «cmd.exe» (чтобы «запомнилось» текущее значение кодовой страницы — без этого у меня не срабатывало; где и как «запомнилось» — не спрашивайте, сам не знаю), выйти из этого «cmd.exe». После этого можно смело удалять параметр «Codepage» из реестра — последующие запуски «cmd.exe» будут происходить с этим самым «запомненным» значением кодовой страницы, в рассмотренной методике — «866». Ну, а после рано или поздно произведённой перезагрузки, при отсутствии в реестре параметр «Codepage», само собой, должна восстановиться кодовая страница по умолчанию.

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

Отправлено: 11:38, 06-02-2010 | #48



Компьютерный форум 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




 
Переход