[Lazarus-es] ejecutar un CopyFile

Maikel Enrique Pernía Matos perniamatos en infomed.sld.cu
Mar Jul 11 15:40:36 CEST 2017


El mar, 11-07-2017 a las 06:20 -0400, hfiandor via Lazarus-es escribió:
> Estimados colegas:
> 
>  
> 
> En una aplicación necesito copiar un fichero .db
> 
> Tengo en el uses el FileUtil, el LazFileUtils y el LazUtils.
> 
>  
> 
> Hago lo siguiente:
> 
> try
> 
>     sour:=camino_BD+'\Clasificadores.db';
> 
>     sour:=#39 + sour + #39;  //para ponerle single quote
> 
>     dest:=camino_BD+'\Copia_Clasificadores.db';
> 
>     dest:=#39 + dest + #39;
> 
> mensa('sour: '+sour);
> 
> mensa('dest: '+dest);
> 
>     copyfile(sour,dest);
> 
> except
> 
>   On E:Exception do
> 
>   begin
> 
>     ShowMessage(E.Message);
> 
>   end;
> 
> end;
> 
>  
> 
> Hasta aquí, el programa no da error, aunque no copia el fichero.
> 
> Consulté el WikiLeaks y trato de hacerlo como se indica.
> 
>  
> 
> Si me pueden dar alguna ayuda, voy a aprender y agradecerlo mucho.
> 
>  
> 
> Saludos
> 
> Ing. Héctor F. Fiandor Rosario
> 
>  
> 
> 
> _______________________________________________
> Lazarus-es mailing list
> Lazarus-es en lists.lazarus-ide.org
> https://lists.lazarus-ide.org/listinfo/lazarus-es


Héctor:

En una app que hice algún tiempo atrás necesitaba copiar ficheros, por
lo que cree un TDialog que mostraba el proceso de la copia, te muestro
el procedimiento de la copia, la llamada al procedimeinto isFree asigna
el parametro a la variable CanClose evitando que el usuario cierre el 
dialogo antes de finalizada la copia.


<code>
procedure TfrmProgress.CopyFileDlg(sourcePath, targetPath : string);
var
   source,
   target  :file of byte;
   Buffer   :array[0..4096] of char;
   progress :integer;
   length :longint;
begin
  frmProgress.isFree(false);
  AssignFile(source, sourcePath);
  reset(source);
  AssignFile(target, targetPath);
  rewrite(target);
  length:=FileSize(sourcePath);
  frmProgress.ProgressBar.Max:=length;
  frmProgress.ProgressBar.Min:=0;
  while length > 0 do
  begin
     BlockRead(source, Buffer[0], SizeOf(Buffer), progress);
     length := length - progress;
     BlockWrite(target, Buffer[0], progress);
     frmProgress.ProgressBar.Position :=
frmProgress.ProgressBar.Position + progress;
     frmProgress.Refresh;
  end;
  CloseFile(source);
  CloseFile(target);

  frmProgress.isFree(true);
  frmProgress.Close;
end;
</code>



--
Este mensaje le ha llegado mediante el servicio de correo electronico que ofrece Infomed para respaldar el cumplimiento de las misiones del Sistema Nacional de Salud. La persona que envia este correo asume el compromiso de usar el servicio a tales fines y cumplir con las regulaciones establecidas

Infomed: http://www.sld.cu/



Más información sobre la lista de distribución Lazarus-es