"Array variável subscrito com gravemente formatados" no Autoit
-
27-09-2019 - |
Pergunta
Estou recebendo o seguinte erro no meu script automático:
"Array Variável Subscrito com gravemente formatado".
E é jogado nesta linha: 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]
Alguma ideia?
Solução
Acho que você não tem subdiretos ou seu código para encontrá -los não está funcionando corretamente. Portanto, seu código está tentando declarar uma matriz de 0 comprimento.
Adicione esta linha logo antes da linha em que você recebe o erro.
MsgBox(0, "Value of $countDirs", $countDirs)
ATUALIZAR
_FileListToArray
Retorna apenas os nomes de arquivo/pastas, não o caminho completo. A chamada para FileGetAttrib
está retornando uma string vazia porque não encontra o arquivo/pasta. Modifique o seu If
Para incluir o caminho pai com o nome do arquivo.
If StringInStr(FileGetAttrib($dir & "\" & $allOfDir[$i]), "D") Then
Outras dicas
Executando seu código, recebo um erro apenas se $ CountDirs ou $ CountFiles forem iguais a 0. Você deve verificar isso antes de tentar usar esses valores ao declarar suas matrizes.
Além disso, uma nota rápida, o seu loop for a partir de 0 ... em Auotit, o índice 0 de uma matriz mantém a contagem de itens na matriz. Você poderia fazer assim: em vez disso:
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