Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-09-2013
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 26-09-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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 23:06:37.
Responder Con Cita
  #3  
Antiguo 26-09-2013
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
Hola ecfisa, la cuestion es que paso los 2 Gb (por ejemplo) de bytes a Kbytes dividiendo entre 1024, pero sigue sin funcionar.

Saludos.
Responder Con Cita
  #4  
Antiguo 27-09-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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 ....
Responder Con Cita
  #5  
Antiguo 27-09-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.011
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿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.
Responder Con Cita
  #6  
Antiguo 27-09-2013
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 909
Poder: 22
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Transforma el valor de progreso a porcentaje y se acabo el tema...

Por ejem:

Código Delphi [-]
ProgressBar.Max:=100; //en %

For Progreso_Leido:=1 To Largo_Archivo do
     progressBar.Position:= Trunc((Progreso_Leido/Largo_Archivo)*100);

O algo así....

Saludos cordiales
Responder Con Cita
  #7  
Antiguo 27-09-2013
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 18
Chris Va por buen camino
Creo que el problema es la ecuación.

Debería ser:
((Largo_Archivo - Progreso_Leido) div 100)

Saludos!
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #8  
Antiguo 27-09-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
danielmj,

Cita:
Empezado por danielmj
...ProgressBar y archivo mayor o igual 2Gb...TProgressBar, está fuera de rango...¿que opción me queda para usarla con archivos grandes?...
Revisa este código:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
   OpenDialog : TOpenDialog;
   F1, F2 : TFileStream;
   Buffer : String;
   MsgProcess : String;
   CountRead : Integer;
   CountWrite : Integer;

begin

   OpenDialog := TOpenDialog.Create(self);
   OpenDialog.InitialDir := 'C:\';
   OpenDialog.Options := [ofFileMustExist];
   OpenDialog.Filter := 'All Files|*.*';
   OpenDialog.FilterIndex := 1;

   ProgressBar1.Min := 0;
   ProgressBar1.Max := 100;
   ProgressBar1.Position := 0;

   if OpenDialog.Execute then
   begin

      try

         F1 := TFileStream.Create(OpenDialog.FileName, fmOpenRead);
         F2 := TFileStream.Create('BK-' + ExtractFileName(OpenDialog.FileName), fmCreate);

         SetLength(Buffer, 1024);

         while F1.Position < F1.Size do
         begin

            CountRead := F1.Read(Buffer[1], 1024);
            CountWrite := F2.Write(Buffer[1], CountRead);

            ProgressBar1.Position := Trunc((F1.Position/F1.Size)*100);

            Application.ProcessMessages;

         end;

         MsgProcess := 'Respaldo del Archivo ' + OpenDialog.FileName + ' Finalizado Satisfactoriamente';

         MessageDlg(MsgProcess, mtInformation, [mbOK], 0);

      except

         MessageDlg('Error de I/O', mtError, [mbOK], 0);

      end;

      F1.Free;
      F2.Free;

      OpenDialog.Free;

   end;

end;
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 04:41:16.
Responder Con Cita
  #9  
Antiguo 27-09-2013
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 909
Poder: 22
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Cita:
Empezado por Chris Ver Mensaje
Creo que el problema es la ecuación.

Debería ser:
((Largo_Archivo - Progreso_Leido) div 100)

Saludos!
Solo por curiosidad que obtiene con esta formula....

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
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Numero Mayor igual , Menor igual... Problema ZiriusB OOP 12 27-06-2011 18:31:24
StringGrid con columnas igual al de un archivo Excel J@ckie Conexión con bases de datos 3 01-03-2011 16:07:20
En red, las BD Access ¿en con SQLs, ¿viaja el archivo completo igual que paradox...? Wonni Tablas planas 4 17-05-2007 19:21:01
FireBird.- Domino que sea entero mayor o igual a cero sakuragi Firebird e Interbase 1 08-09-2006 12:10:09
La impresión no se ve igual Newbie Impresión 2 06-11-2003 03:49:55


La franja horaria es GMT +2. Ahora son las 07:12:16.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi