Ir al contenido


Foto

[TRUCO DELPHI] Dividir y Unir un Archivo por Partes.


  • Por favor identifícate para responder
No hay respuestas en este tema

#1 sir.dev.a.lot

sir.dev.a.lot

    Advanced Member

  • Miembros
  • PipPipPip
  • 545 mensajes
  • Location127.0.0.1

Escrito 26 agosto 2016 - 08:32

[TRUCO DELPHI] Dividir y Unir un Archivo por Partes.

 

Aqui les van las funciones.


delphi
  1. //Dividir
  2. function SplitFile(FileName : TFileName; SizeofFiles : Integer; ProgressBar
  3. : TProgressBar) : Boolean;
  4. var
  5. i : Word;
  6. fs, sStream: TFileStream;
  7. SplitFileName: String;
  8. begin
  9. ProgressBar.Position := 0;
  10. fs := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
  11. try
  12. for i := 1 to Trunc(fs.Size / SizeofFiles) + 1 do
  13. begin
  14. SplitFileName := ChangeFileExt(FileName, '.'+ FormatFloat('000', i));
  15. sStream := TFileStream.Create(SplitFileName, fmCreate or
  16. fmShareExclusive);
  17. try
  18. if fs.Size - fs.Position < SizeofFiles then
  19. SizeofFiles := fs.Size - fs.Position;
  20. sStream.CopyFrom(fs, SizeofFiles);
  21. ProgressBar.Position := Round((fs.Position / fs.Size) * 100);
  22. finally
  23. sStream.Free;
  24. end;
  25. end;
  26. finally
  27. fs.Free;
  28. end;
  29.  
  30. end;
  31.  
  32. // Unir
  33. function CombineFiles(FileName, CombinedFileName : TFileName) : Boolean;
  34. var
  35. i: integer;
  36. fs, sStream: TFileStream;
  37. filenameOrg: String;
  38. begin
  39. i := 1;
  40. fs := TFileStream.Create(CombinedFileName, fmCreate or fmShareExclusive);
  41. try
  42. while FileExists(FileName) do
  43. begin
  44. sStream := TFileStream.Create(FileName, fmOpenRead or
  45. fmShareDenyWrite);
  46. try
  47. fs.CopyFrom(sStream, 0);
  48. finally
  49. sStream.Free;
  50. end;
  51. Inc(i);
  52. FileName := ChangeFileExt(FileName, '.'+ FormatFloat('000', i));
  53. end;
  54. finally
  55. fs.Free;
  56. end;
  57. end;

Ejemplo de uso:


delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3. SplitFile('C:\temp\FileToSplit.chm',1000000, ProgressBar1);
  4. end;
  5.  
  6. procedure TForm1.Button2Click(Sender: TObject);
  7. begin
  8. CombineFiles('C:\temp\FileToSplit.001','H:\temp\FileToSplit.chm');
  9. end;

Saludos!


  • 1




IP.Board spam blocked by CleanTalk.