«Массивная переменная индекс плохо отформатирована» в AutoIt

StackOverflow https://stackoverflow.com/questions/2851690

  •  27-09-2019
  •  | 
  •  

Вопрос

Я получаю следующую ошибку в моем скрипте 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]

Любые идеи?

Это было полезно?

Решение

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

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

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

ОБНОВИТЬ

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

If StringInStr(FileGetAttrib($dir & "\" & $allOfDir[$i]), "D") Then

Другие советы

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

Кроме того, быстрое примечание, ваш цикл начиная с 0 ... в Auotit Idex of Array содержит подсчет элементов в массиве. Вы могли бы сделать это так, как это вместо этого:

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top