“Variable de subíndice de matriz con formato incorrecto” en AutoIt

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

  •  27-09-2019
  •  | 
  •  

Pregunta

Estoy recibiendo el siguiente error en mi script AutoIt:

  

"variable de subíndice de matriz mal formateado."

y se lanza en esta línea: 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]

¿Alguna idea?

¿Fue útil?

Solución

Te estoy adivinando o bien no tienen ningún subdirectorios o su código de encontrarlos no está funcionando correctamente. Así que su código está tratando de declarar una matriz de 0 longitud.

Añadir esta línea justo antes de la línea donde se obtiene el error.

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

ACTUALIZACIÓN

_FileListToArray sólo devuelve los nombres de archivo / carpeta, no la ruta completa. La llamada a FileGetAttrib está volviendo una cadena vacía porque no encuentra el archivo / carpeta. Modificar If para incluir la ruta de los padres con el nombre del archivo.

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

Otros consejos

El funcionamiento de su código, solo me dan un error si countDirs $ o $ countFiles es igual a 0. Se debe comprobar para este antes de intentar utilizar estos valores al declarar sus matrices.

Además, una nota rápida, el bucle For está empezando a 0 ... AuotIt en el índice 0 de la matriz contiene el número de elementos de la matriz. Se podía hacerlo de esta manera en su lugar:

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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top