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?

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top