Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #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 03:41:16.
Responder Con Cita
 



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 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


La franja horaria es GMT +2. Ahora son las 19:07:30.


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