amel27
Цитата:
- у тебя очепятка ($path vs $sPath);
|
Вообще-то сделано специально, теперь вижу, что без смысла.
Цитата:
- имя каталога заносится в массив без пути;
|
Поторопился
Цитата:
- проверка локального массива через IsArray() необязательна (особенность For);
|
Учту на будущее.
Цитата:
- проверка глобального массива IsArray() желательна (особенность _ArrayAdd())
|
А зачем постоянно проверять массив
$aGDir ведь он уже обьявлен массивом?
Помнишь пример который ты постил для меня:
Код:

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.
|
А зачем постоянно передавать глобальный массив по ссылке?