![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
ProgressBar y archivo mayor o igual 2Gb
Hola,
...y la nueva pega ha surgido, vereis tengo una variable que puede ser => a 2Gb, por otra parte tengo un TProgressBar al que le pongo la propiedad Max, en tiempo de ejecución y viene dada por la división entera del tamaño del archivo previamente obtenido entre el valor de la variable que puede ser menor, igual o mayor a 2Gb. Si realizo la prueba con un valor para Max de 2Gb o mas, la aplicación me devuelve un mensaje de error diciendo que el TProgressBar, está fuera de rango. Según he mirado en internet, esta barra de progreso tiene problemas con archivos de mas de 2Gb ¿que opción me queda para usarla con archivos grandes? Decir que con archivos de 1Gb o menos, va perfecta tanto en compilacion como en ejecucion, por lo que considero (no se si bien o mal) que es "defecto" del componente. Espero podais ayudarme. Saludos. P.D.: Antes de poner este hilo, he buscado en el foro he visto varias cosas sobre el TProgressBar pero no mi caso, de todos modos si ya se ha debatido, pido disculpas. |
#2
|
||||
|
||||
Hola danielmj .
La propiedad Max del componente TControlBar soporta un rango de 0 a 2147483647. Si supera ese valor, pienso que tendrìas que dividir el tamaño del archivo a fines de representar el progreso en el TProgressBar. Saludos ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 26-09-2013 a las 22:06:37. |
#3
|
||||
|
||||
Hola ecfisa, la cuestion es que paso los 2 Gb (por ejemplo) de bytes a Kbytes dividiendo entre 1024, pero sigue sin funcionar.
Saludos. |
#4
|
||||
|
||||
Hola danielmj.
Para entender mejor la situación, de que modo no funciona ¿ Da un error, no avanza de posiciòn, se traba en algún punto ? Sería muy orientativo ver la parte del código donde supones que se produce el error (o no ejecuta la operación que deseada). Saludos. ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#5
|
||||
|
||||
¿Qué quiere decir que no funciona?, ¿qué mensaje sale?, ¿qué problema exactamente tienes?, ¿cómo la usas?, ¿dónde está el código?...
EDITO: acabo de ver la respuesta de ecfisa, muy lógica, obviamente.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#6
|
|||
|
|||
Transforma el valor de progreso a porcentaje y se acabo el tema...
Por ejem:
O algo así.... Saludos cordiales |
#7
|
||||
|
||||
Creo que el problema es la ecuación.
Debería ser: ((Largo_Archivo - Progreso_Leido) div 100) Saludos! |
#8
|
||||
|
||||
danielmj,
Cita:
El código anterior permite leer y copiar archivos de un tamaño en bytes de 2^63 - 1 = 9.223.372.036.854.775.807 (Int64), en porciones de 1024 bytes y mostrar el progreso del mismo por medio de un componente TProgressbar normalizado en un rango de 1 a 100. La clave esta en la ecuación: ProgressBar1.Position := Trunc((F1.Position/F1.Size)*100); Nota: El código fue probado con archivos menores a 2 GB y mayores a 2GB funcionando en todos los casos correctamente. Espero sea útil ![]() Nelson. Última edición por nlsgarcia fecha: 27-09-2013 a las 03:41:16. |
#9
|
|||
|
|||
Cita:
Si es transformar a porcentaje creo que está mal... Caso 1: Trunc(512/1024*100)=>50 % ![]() Caso 2: (1024-512) div 100 =>5 ? ![]() Saludos cordiales |
#10
|
||||
|
||||
Hola, gracias por los consejos, os pongo el código...
Lo que trato de conseguir es que el progreso de la barra avance segun se divida el tamaño del archivo entre la cantidad elegida, en este caso son 2Gb, pero podrian ser 4,6 u 8,2 etc... Es en los casos donde ese tamaño es = o > a 2Gb donde falla. Siempre que sea = o < a 1Gb todo funciona perfectamente includo el progreso de la barra. Y estoy como loco haciendo variaciones en la division. He probado a dividir los 2 Gb entre 1024 para pasarlo a Kbytes, sino me devuelve el mensaje "barra de progreso fuera de rango", he probado a dividir entre 1024 el tamaño del archivo y luego el resultado dividirlo entre los 2Gb div 1024 y el resultado de esto asignarlo a la propiedad Max de la barra, pero no consigo "sacar" archivos de 2Gb a partir del archivo original de 13 Gb (es un ejemplo), solo de 2Mb. O eso, o el mensaje de "... fuera de rango". Sé que el error debe estar entre el limite de progressbar.max y la/s divisiones, pero no consigo verlo por muchas vueltas que le doy. Saludos y gracias a todos. |
#11
|
||||
|
||||
danielmj,
Cita:
El código anterior lee un archivo de cualquier tamaño en porciones (MaxInt div 1024) y muestra su progreso en un componente TProgressBar normalizado en el rango de 1 a 100. Nota: La idea es mostrar el proceso de un archivo en función porcentual y no en divisiones de su tamaño original, lo cual se adapta a cualquier tamaño de archivo hasta un máximo de 2^63 - 1. Espero sea útil ![]() Nelson. Última edición por nlsgarcia fecha: 27-09-2013 a las 18:08:23. |
#12
|
||||
|
||||
Hola buenos dias,
Gracias nlsGarcia, siento no haber respondido antes, pero estaba fuera de España por trabajo y no he tenido tiempo de mirar nada, a parte que todo el codigo lo tenia aqui en casa. Ahora me pondre con el y veré que tal, ya te comento. Gracias y un saludo. |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Numero Mayor igual , Menor igual... Problema | ZiriusB | OOP | 12 | 27-06-2011 17:31:24 |
StringGrid con columnas igual al de un archivo Excel | J@ckie | Conexión con bases de datos | 3 | 01-03-2011 15:07:20 |
En red, las BD Access ¿en con SQLs, ¿viaja el archivo completo igual que paradox...? | Wonni | Tablas planas | 4 | 17-05-2007 18:21:01 |
FireBird.- Domino que sea entero mayor o igual a cero | sakuragi | Firebird e Interbase | 1 | 08-09-2006 11:10:09 |
La impresión no se ve igual | Newbie | Impresión | 2 | 06-11-2003 02:49:55 |
![]() |
|