elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  [SOLUCIONADO] Problema en un While + variable + io.directory.getfiles
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [SOLUCIONADO] Problema en un While + variable + io.directory.getfiles  (Leído 2,158 veces)
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.810



Ver Perfil
[SOLUCIONADO] Problema en un While + variable + io.directory.getfiles
« en: 30 Enero 2013, 19:32 pm »

EDITO 3:
Ya está, lanzar el proceso paraba la ejecución de ese sub-thread (yo pensaba que no), por eso el while no funcionaba, aunque me daba la sensaciónd e que sí,
así que tengo que hacer un nuevo thread para ejecutar el proceso, y hacer las comprobaciones en el antiguo thread mientras ese nuevo thread se está ejecutando.

listo,
Saludos!





Esta es la situación:
Al darle a un botón, ejecuto un proceso que va generando pequeños archivos en un directorio, con este patron:  "Disc.zip.001",  "Disc.zip.002", "Disc.zip.003"

Y lo que intento es, mientras se van generando esos archivos, ir contandolos para agregar un valor a una barra de progreso,
es decir, si se han de crear 50 archivos, pero de momento solo se han creado 20 archivos, pues examino el directorio para obtener el número "20", y el valor que le doy a la barra de progreso es "20".



Este es el Problema:
Algo pasa con la variable o con el while, porque el progreso no se muestra, la variable no suma el valor,
me da la sensación de que el io.directory.getfiles solo se ejecuta una vez, y es cuando el directorio está vacio (sin archivos zip) y por eso el valor no aumenta... es "0"
ya que cuando el directorio está lleno de archivos zip, si vuelvo a darle al botón, me muestra el valor correcto, por eso pienso que sólo se ejecuta una vez... a pesar de estar dentro de un while.  :rolleyes:



Este es el código:
Código
  1.            Dim Volumes
  2.  
  3.            If Copy_Mode = "Zip" And Not Want_to_cancel_thread = True Then
  4.                While Not Run_Process(TempDir & "Splitty_7zip.exe", " a " & """" & Selected_Output_Directory & "\Disc.zip" & """" & " " & """" & Selected_Directory & """" & " -v" & Selected_Disc_Bytes.ToString & "b " & " -mx=0 -bd -tzip", False, True) = True
  5.  
  6.                    If Want_to_cancel_thread Then Exit While ' Esta comprobación funciona corréctamente, sin problemas.
  7.  
  8.                   ' Esto de aquí no aumenta de valor... o al menos sólo lo hace una única vez, no lo sé... :
  9.                    Volumes = IO.Directory.GetFiles(Selected_Output_Directory, "*.zip.*")
  10.                    InvokeControl(ProgBarPlus, Sub(x) x.Value = Volumes.Length)
  11.                    'InvokeControl(ProgBarPlus, Sub(x) x.Refresh()) ' He probado a refrescar el control, pero creo que es problema de la variable.
  12.  
  13.                End While
  14.            End If

Cuando le doy al botón para generar los zips:

(el valor no aumenta ni nada!)

Cuando le doy al botón en un directorio que ya contiene zips (esto es hacer trampa, pero es para ver si así si que funciona):

(me muestra el valor correcto)


¿Alguien me puede decir si el código está bien, o he cometido algún error?



EDITO:
 
También he probado así, pero nada, el valor sigue siendo 0, solo se procesa una única vez...creo...

Código
  1.                While Not Run_Process(TempDir & "Splitty_7zip.exe", " a " & """" & Selected_Output_Directory & "\Disc.zip" & """" & " " & """" & Selected_Directory & """" & " -v" & Selected_Disc_Bytes.ToString & "b " & " -mx=0 -bd -tzip", False, True) = True
  2.                    InvokeControl(ProgBarPlus, Sub(x) x.Value = IO.Directory.GetFiles(Selected_Output_Directory, "*.zip.*").Length)
  3.                End While
  4.            End If


EDITO 2:
 

Y esto:

Estoy seguro de que la comprobación sólo se ejecuta una vez.. porque si el directorio está vacío no me muestra NADA (no hay msgbox), pero si el directorio está lleno, me muestra el msgbox...

Código
  1.              While Not Run_Process(TempDir & "Splitty_7zip.exe", " a " & """" & Selected_Output_Directory & "\Disc.zip" & """" & " " & """" & Selected_Directory & """" & " -v" & Selected_Disc_Bytes.ToString & "b " & " -mx=0 -bd -tzip", False, True) = True
  2.                    If Want_to_cancel_thread Then Exit While
  3.  
  4.                    If IO.File.Exists(Selected_Output_Directory & "\Disc.zip.001") Then
  5.                        MsgBox(IO.Directory.GetFiles(Selected_Output_Directory, "*.zip.*").Length)
  6.                        ' InvokeControl(ProgBarPlus, Sub(x) x.Value = IO.Directory.GetFiles(Selected_Output_Directory, "*.zip.*").Length)
  7.                    End If
  8.  
  9.                End While
  10.            End If



« Última modificación: 30 Enero 2013, 20:17 pm por EleKtro H@cker » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines