Что нового

Перебор параметров, передаваемых функции

  • Автор темы maximus_808
  • Дата начала
M

maximus_808

Гость
Функции необходимо в виде параметров передать пути папок (может быть много).
Сама функция проверяет существуют ли эти каталоги и в случае если их нет - создает. Если не может создать, то сообщает об этом и выходит из скрипта.
У меня хватило фантазии только на написание функции для одной папки. Буду признателен за помощь, если кто подскажет как переделать эту функцию для обхода нескольких папок.

Вот код:
Код:
Func CreateProgramDir ($Dir)
	If FileExists($Dir) Then
		Return(0)
	Else
		If Not DirCreate($Dir) Then
			MsgBox(0, "Ошибка","Не могу создать каталог " & $Dir & @CRLF & "Возможно у Вас нет прав на создание директории в каталоге программы...")
			Exit
		EndIf
	EndIf
EndFunc
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
А что мешает вам использовать функцию несколько раз?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Или можешь передать в функцию массив.
 
Автор
M

maximus_808

Гость
Medic84 сказал(а):
А что мешает вам использовать функцию несколько раз?
Люблю красивый лаконичный код ;)
Но если чесно, то я заранее не знаю сколько будет папок. И гораздо проще передать их все в виде параметров к функции чем вызывать функцию столько раз, сколько есть папок.
При этом на основе этой функции будет строится функция для проверки наличия файлов ... а там количество на порядок больше.
 
Автор
M

maximus_808

Гость
Yashied сказал(а):
Или можешь передать в функцию массив.
Можно и массивом, если сначала получить список папок в родительской директории ...
Вот только как?
 
Автор
M

maximus_808

Гость
maximus_808 сказал(а):
Yashied сказал(а):
Или можешь передать в функцию массив.
Можно и массивом, если сначала получить список папок в родительской директории ...
Вот только как?
Нашел!))))
Код:
#include <Array.au3> 
 
$aFilesList = _FileListToArrayParse(@SystemDir & "\Config", "*", -1) 
_ArrayDisplay($aFilesList) 
 
Func _FileListToArrayParse($sPath, $sMask="*", $iMode=-1) ;$iMode > 0 только папки, иначе папки + файлы 
    If Not StringInStr(FileGetAttrib($sPath), "D") Then Return SetError(1, 0, 0) 
 
    Local $PathesArr[2] = [1, $sPath] 
    Local $hSearch, $sFindNext, $i 
 
    While $i < $PathesArr[0] 
        $i += 1 
        $hSearch = FileFindFirstFile($PathesArr[$i] & "\" & $sMask) 
        If $hSearch = -1 Then ContinueLoop 
        While 1 
            $sFindNext = FileFindNextFile($hSearch) 
            If @error Then ExitLoop 
            $sFindNext = $PathesArr[$i] & "\" & $sFindNext 
            If $iMode <= 0 Or ($iMode = 1 And StringInStr(FileGetAttrib($sFindNext), "D")) Then 
                $PathesArr[0] += 1 
                ReDim $PathesArr[$PathesArr[0]+1] 
                $PathesArr[$PathesArr[0]] = $sFindNext 
            EndIf 
        WEnd 
        FileClose($hSearch) 
    Wend 
    Return $PathesArr 
EndFunc
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
А нельзя ли оверпост в виде 3-х подряд сообщений в промежутке в несколько минут объединить в одно?
59.gif
 
Автор
M

maximus_808

Гость
Belfigor сказал(а):
А нельзя ли оверпост в виде 3-х подряд сообщений в промежутке в несколько минут объединить в одно?
59.gif
Приму во внимание ;)
*был бит лицом об кафель* :smile:
 
Автор
M

maximus_808

Гость
Belfigor сказал(а):
Кстати а у меня единственного так отображается страница?
Похоже CSS форума правили ;) ... у меня в ГуглХром практически так же, только текст не выезжает на след пост, а только поле отображения кода становится шириной в весь листинг ... и рамочка ограничителя окна кода остается ... забавненько так))))
.....
хехе! Пока писал ответ, форум стал на свои скрипты ругаться при сохранении :smile: Вебмастера в студию!)))
 
Автор
M

maximus_808

Гость
Yashied сказал(а):
maximus_808 сказал(а):

maximus_808, а как эта функция связана с твоей темой?
Как заметил Yashied можно передать папки в первоначальную функцию CreateProgramDir в виде массива. Вот и начал размышлять на тему массивов и папок...
Эта функция (_FileListToArrayParse) возвращает массив имен файлов и/или папок, в зависимости от параметров, плюс файлы еще и по маске можно задать.
Сейчас как раз дорабатываю ее чтобы она возвращала только файлы (добавлением еще одного параметра в функцию _FileListToArrayParse) и будет как раз универсальный вариант, так как в массив попадают и файлы и папки.
Хотя, если честно, то первоначальную задачу это не решает :-[ так как папки я получаю из ini-файла...
 
Верх