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

Показать сообщение отдельно

Аватара для Maza Faka

Ветеран


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

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


amel27
Цитата:
- у тебя очепятка ($path vs $sPath);
Вообще-то сделано специально, теперь вижу, что без смысла.

Цитата:
- имя каталога заносится в массив без пути;
Поторопился

Цитата:
- проверка локального массива через IsArray() необязательна (особенность For);
Учту на будущее.

Цитата:
- проверка глобального массива IsArray() желательна (особенность _ArrayAdd())
А зачем постоянно проверять массив $aGDir ведь он уже обьявлен массивом?

Цитата:
- зачем $sRet ?
Помнишь пример который ты постил для меня:
Код: Выделить весь код
MsgBox(64, "Done", _FindFile("icqlite.exe", @ProgramFilesDir))

Func _FindFile($sFile, $sPath)
    Local $sRetPath='', $sFullPath
    Local $hSearch = FileFindFirstFile($sPath & "\*.*"), $sName = FileFindNextFile($hSearch)
    While @error=0 And $sRetPath = ''
        $sFullPath = $sPath &'\'& $sName
        If $sName = $sFile Then $sRetPath = $sPath
        If StringInStr(FileGetAttrib($sFullPath), "D") Then $sRetPath = _FindFile($sFile, $sFullPath)
        $sName = FileFindNextFile($hSearch)
    WEnd
    FileClose($hSearch)
    Return $sRetPath
EndFunc
Цитата:
Теперь к вопросу о возвращаемом значении… Во-первых, функция не является рекурсивной, так как нарушено одно из правил рекурсии: возвращаемое функцией значение должно передаваться по всей цепочке рекурсивных вызовов, у тебя же значение, возвращаемое WritePathToReg() вообще игнорируется… из этого имеем два следствия:
- дальше первого уровня подкаталогов функция и не пытается заглянуть, если бы файл лежал глубже чем на один уровень функция бы его не нашла;
- функция, осуществившая рекурсивный вызов не знает о результате этого вызова… поэтому даже если файл найден (как в твоем случае) на возвращаемое значение это никак не повлияет и результат будет зависеть только от содержимого текущего каталога ($path).

один из возможных вариантов,
ключевой переменной, передаваемой между рекурсивными вызовами является $sRetPath
Цитата:
- наконец, повторюсь: чтобы избежать путаницы при повторном использовании функций с глобальными переменными их нужно объявлять в параметрах через ByRef.
А зачем постоянно передавать глобальный массив по ссылке?

Отправлено: 14:06, 17-10-2007 | #610