«Подпись переменной массива плохо отформатирована» в AutoIt - PullRequest
0 голосов
/ 17 мая 2010

Я получаю следующую ошибку в моем скрипте AutoIt:

"Подпись переменной массива неверно отформатирована."

и он добавляется в эту строку: Local $allDirs[$countDirs]

Func archiveDir($dir)

    ; Get all the files under the current dir
    $allOfDir = _FileListToArray($dir)
    Local $countDirs = 0
    Local $countFiles = 0

    $imax = UBound($allOfDir)
    For $i = 0 to $imax - 1
        If StringInStr(FileGetAttrib($allOfDir[$i]),"D") Then
            $countDirs = $countDirs + 1
        Else
            $countFiles = $countFiles + 1
        EndIf   
    Next

    Local $allDirs[$countDirs]
    Local $allFiles[$countFiles]

Есть идеи?

Ответы [ 2 ]

1 голос
/ 18 мая 2010

При запуске вашего кода я получаю ошибку только в том случае, если $ countDirs или $ countFiles равен 0. Вы должны проверить это, прежде чем пытаться использовать эти значения при объявлении ваших массивов.

Также, быстрое замечание, ваш цикл For Loop начинается с 0 ... в AuotIt индекс 0 массива содержит количество элементов в массиве. Вместо этого вы можете сделать это следующим образом:

For $i = 1 to $allOfDir[0]
    If StringInStr(FileGetAttrib($allOfDir[$i]), "D") Then
        $countDirs+=1
    Else
       $countFiles+=1
    EndIf
Next

If ($coundDirs > 0) Then
   Local $allDirs[$countDirs]
   ; do whatever else you need to do here.
EndIf

If ($countFiles > 0) Then
   Local $allFiles[$countFiles]
   ; do whatever else you need to do here.
EndIf
1 голос
/ 17 мая 2010

Полагаю, у вас либо нет подкаталогов, либо ваш код для их поиска работает неправильно. Итак, ваш код пытается объявить массив длиной 0

.

Добавьте эту строку прямо перед строкой, в которой вы получили ошибку.

MsgBox(0, "Value of $countDirs", $countDirs)

UPDATE

_FileListToArray возвращает только имена файлов / папок, а не полный путь. Вызов FileGetAttrib возвращает пустую строку, потому что он не находит файл / папку. Измените ваш If, включив в него родительский путь с именем файла.

If StringInStr(FileGetAttrib($dir & "\" & $allOfDir[$i]), "D") Then
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...