Что нового

Написал поиск определенной папки в подпапках, но при пустой подпапке ошибка

hexin

Новичок
Сообщения
32
Репутация
0
Набросал код который просто ищет определенную папку в подпапках, но когда в одной из подпапок пусто то код выбивает ошибку, как исправить не знаю. Помогите пожалуйста исправить.
Всё просто, например в папке DATA лежат две папки data1 и data2, папка data1 пустая, а в папке data2 лежит папка info, ищем папку info, и при таком поиске появится ошибка.
А если в папке data1 тоже будет любая папка то поиск пройдет нормально без ошибок, то есть ошибка появляется тогда когда хотя бы одна папка пустая.
Я так понимаю нужно просто создать проверку на ошибки, но как это сделать не знаю.


Код:
#include <File.au3>

$aSearch = "info" ; имя папки которую ищем
$FileList=_FileListToArray(@ScriptDir & "\DATA") ; считываем в массив имена всех папок которые в папке DATA


        $count_catalog = 1
        Do
                $temp_cat = _FileListToArray(@ScriptDir & "\DATA\"&$FileList[$count_catalog])
                If @error=4 Then                    

                        $count_catalog = $count_catalog + 1
                Else

                        Assign($FileList[$count_catalog], $temp_cat, 2)
                        $vVal = Eval($FileList[$count_catalog])

                        $count_catalog = $count_catalog + 1
                EndIf

        Until $count_catalog = $FileList[0]+1

        $count_catalog = 1

        Do

                $vVal = Eval($FileList[$count_catalog])

                        $count_search = 1
                        $marker_search = 0
                        Do

                                if StringInStr($vVal[$count_search], $aSearch) Then
                                    MsgBox (0,"поиск","Папка: <"&$aSearch&"> обнаружена в папке <"&$FileList[$count_catalog]&">")
                                    $marker_search = 1
                                Else
                                    $count_search = $count_search + 1
                                EndIf

                        Until $count_search = $vVal[0]+1 or $marker_search = 1
                    $count_catalog = $count_catalog + 1

        Until $count_catalog = $FileList[0]+1  or $marker_search = 1

        if $marker_search = 0 Then
                MsgBox (0,"поиск","Папка: <"&$aSearch&"> не обнаружена")
        Else
        EndIf
 
Последнее редактирование:

IMStrelcov

CTPEJIbLLOB
Сообщения
253
Репутация
64
Код:
$sPath = @ScriptDir& '\DATA'                ; путь по которому перебираем подпапки
$sDir = 'info'                                ; имя папки которую ищем в подпапках

$sResult = Path_SearchDir_($sPath, $sDir)    ;производим поиск папки в подпапках по указ. пути

If Not @error Then
   MsgBox(0, '', 'Подпапка "'& $sDir& '" найдена в следующих папках:'& @CRLF& $sResult)
Else
   MsgBox(0, '', 'Подпапка "'& $sDir& '" не найдена.')
EndIf

Func Path_SearchDir_($_sPath, $_sDir)
   Local $_sSubDir, $_hList, $_sResult
   $_hList = FileFindFirstFile($_sPath& '\*.*')
   While 1
      $_sSubDir = FileFindNextFile($_hList)
      If @error Then ExitLoop
      If @extended And PathIsDir_($_sPath& '\'& $_sSubDir& '\'& $_sDir) Then $_sResult &= $_sPath& '\'& $_sSubDir& @CRLF
   WEnd
   FileClose($_hList)
   If $_sResult Then Return $_sResult
   Return SetError(1)
EndFunc

Func PathIsDir_($_sPath)
   $_iResult = FileGetAttrib($_sPath)
   If @error Then Return 0
   Return StringRegExp($_iResult, '(?i)(D)')
EndFunc
 
Автор
H

hexin

Новичок
Сообщения
32
Репутация
0

IMStrelcov,​

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

Код:
#include <File.au3>


$aSearch = "info" ; имя папки которую ищем
$FileList=_FileListToArray(@ScriptDir & "\DATA") ; считываем в массив имена всех папок которые в папке DATA



        $count_catalog = 1
        Do
                $temp_cat = _FileListToArray(@ScriptDir & "\DATA\"&$FileList[$count_catalog])
                If @error=4 Then
                        $count_catalog = $count_catalog + 1

                Else

                        Assign($FileList[$count_catalog], $temp_cat, 2)
                        $vVal = Eval($FileList[$count_catalog])

                        $count_catalog = $count_catalog + 1
                        $i = $count_catalog

                EndIf

        Until $count_catalog = $FileList[0]+1




        $count_catalog = 1

        Do
                 $count_search = 1
                $marker_search = 0
                $vVal = Eval($FileList[$count_catalog])

                If @error<> 1 Then
                        Do
                                if StringInStr($vVal[$count_search], $aSearch) Then
                                    MsgBox (0,"поиск","Папка: <"&$aSearch&"> обнаружена в папке <"&$FileList[$count_catalog]&">")
                                    $marker_search = 1
                                Else
                                    $count_search = $count_search + 1
                                EndIf
                          
                        Until $count_search = $vVal[0]+1 or $marker_search = 1
                        $count_catalog = $count_catalog + 1
                Else
                    $count_catalog = $count_catalog + 1
                EndIf

        Until $count_catalog = $FileList[0]+1  or $marker_search = 1

        if $marker_search = 0 Then
                MsgBox (0,"поиск","Папка: <"&$aSearch&"> не обнаружена")
        Else
        EndIf
 
Последнее редактирование:

Norm

Продвинутый
Сообщения
268
Репутация
69
By hexin
Попробовал Ваш пример, но переименовал папки data2 в data-2 и после этого уже ничего не нашлось.

Поробуйте этот пример. Думаю он проще и быстрее должен быть.
Код:
#include <File.au3>

$aSearch = "info" ; имя папки которую ищем
Local $RetInfo = _FileListToArrayRec(@ScriptDir & "\DATA", $aSearch ,2 ,1 ,1 ,1)

If @error Then
    MsgBox (0,"поиск","Папка: <"&$aSearch&"> не обнаружена")
Else
    MsgBox (0,"поиск","Папка: <"&$aSearch&"> обнаружена в папке <"& $RetInfo[1] &">")
EndIf
 
Последнее редактирование:
Верх