Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-03-2008
fide fide is offline
Miembro
 
Registrado: oct 2006
Posts: 331
Poder: 18
fide Va por buen camino
Picar un fichero en trozos

Hola. Ante todo saludos para todo el que lea este pors.
Bueno, lo que necesito hacer es algo como lo que hace el WinRar, o sea, picar un archivo en varios trozos mas pequeños. Pero que ese numero este regido por los KB.

Es que tengo que hacer un servicio de actualizacion de antivirus por correo. O sea, un amigo se suscribe a mi servicio. Le doy una aplicacion que le envia un email a mi servidor, y cuando la otra aplicacion en el servidor lo recibe, entre las informaciones que recibe, esta el maximo de adjuntos que puede enviarse por ese correo.

Cuando cojo esto, tengo que picar un fichero en cuantas partes sea necesario para enviarlo sin problemas por el correo que se esta usando para ello.

Por ejemplo, Juan se suscribe. Su correo soporte 400 KB de adjunto. Y mi programa va a enviar una actualizacion que pesa 800 KB. Para ello mi programa calcula que si lo pica en 400, saldran 2 partes y se mandaran sin problemas por ahi.

Ya tengo todos los calculos que hay que realizar, solo necesito algo como esto, por poner ejemplo.

Código Delphi [-]
function PicarFichero(Fichero, CarpetaDestino: String; SizeOnKB: Integer): Boolean;

o sea, un, el archivo que voy a cortar, a donde voy a guardar los pedazoz, en cuantos KB picare cada parte de el...

Gracias desde ya mismo...
Saludos!
Responder Con Cita
  #2  
Antiguo 09-03-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Revisa al artículo How to Split and Merge Files using Delphi code de Zarko Gajic.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 10-03-2008
fide fide is offline
Miembro
 
Registrado: oct 2006
Posts: 331
Poder: 18
fide Va por buen camino
Dec, muchisimas gracias mi amigo. A la verdad que eso esta super good!
Lo revisare para ver si me sirve a la perfeccion...
Responder Con Cita
  #4  
Antiguo 10-03-2008
fide fide is offline
Miembro
 
Registrado: oct 2006
Posts: 331
Poder: 18
fide Va por buen camino
Aqui esta el codigo para los que no tengan acceso a la pagina

Código Delphi [-]
procedure SplitFile(FileName : TFileName; FilesByteSize : Integer) ;
// FileName == file to split into several smaller files
// FilesByteSize == the size of files in bytes
var
   fs, ss: TFileStream;
   cnt : integer;
   SplitName: String;
begin
   fs := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite) ;
   try
     for cnt := 1 to Trunc(fs.Size / FilesByteSize) + 1 do
     begin
       SplitName := ChangeFileExt(FileName, Format('%s%d', ['._',cnt])) ;
       ss := TFileStream.Create(SplitName, fmCreate or fmShareExclusive) ;
       try
         if fs.Size - fs.Position < FilesByteSize then
           FilesByteSize := fs.Size - fs.Position;
         ss.CopyFrom(fs, FilesByteSize) ;
       finally
         ss.Free;
       end;
     end;
   finally
     fs.Free;
   end;
end;

Note: a 3 KB file 'myfile.ext' will be split into 'myfile._1', 'myfile._2','myfile._3' if FilesByteSize parameter equals 1024 (1 KB).

procedure MergeFiles(FirstSplitFileName, OutFileName : TFileName) ;
// FirstSplitFileName == the name of the first piece of the split file
// OutFileName == the name of the resulting merged file
var
   fs, ss: TFileStream;
   cnt: integer;
begin
   cnt := 1;
   fs := TFileStream.Create(OutFileName, fmCreate or fmShareExclusive) ;
   try
     while FileExists(FirstSplitFileName) do
     begin
       ss := TFileStream.Create(FirstSplitFileName, fmOpenRead or fmShareDenyWrite) ;
       try
         fs.CopyFrom(ss, 0) ;
       finally
         ss.Free;
       end;
       Inc(cnt) ;
       FirstSplitFileName := ChangeFileExt(FirstSplitFileName, Format('%s%d', ['._',cnt])) ;
     end;
   finally
     fs.Free;
   end;
end;

Uso:

Para trozear
SplitFile('c:\UnaImagen.bmp', 1024) ; //picar en archivos de 1 KB.

Para empatar
MergeFiles('C:\UnaImagen._1','C:\UnaImagenEmpatada.bmp') ;
~~~~~~~~~~~~~~~~~~~~~~~~~
Responder Con Cita
Respuesta



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
Programa a trozos angelp4492 Varios 6 21-12-2007 01:06:19
Me gustaría conseguir trozos de código Delphi o Snippets kbaby Varios 9 06-12-2007 17:51:13
TreeView, no se ve nodo seleccionado al picar sobre otro componente. Mannu C++ Builder 1 26-11-2007 11:09:17
Obtener un fichero adjunto a un nodo de un fichero XML muntasil Internet 0 18-07-2006 12:57:57
Manejar Trozos de BMP Deiv Gráficos 13 03-07-2006 14:32:54


La franja horaria es GMT +2. Ahora son las 05:44:08.


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