Array
(
)

Funcao para copiar arquivos no Kylix?

Kitsystem
   - 30 mai 2005

Bom dia,

Por favor, qual seria a função correta para copiar arquivos no Kylix

O CopyFile não existe
e o CopyFrom não consegui fazer funcionar

Obrigado


Dopi
   - 31 mai 2005

A função abaixo foi extraida da Unit ACBrUtil.pas

#Código


{-----------------------------------------------------------------------------
*** CopyFileTo Extraida de idGlobals.pas - INDY ***
Copia arquivo "AFromFilename" para "AToFilename". Retorna true se OK
Nao copia, e retorna false se o destino "AToFilename" já existir e
"AFailIfExists" for true
---------------------------------------------------------------------------- }
function CopyFileTo(AFromFileName, AToFileName : String;
const AFailIfExists : Boolean) : Boolean;
{$IFNDEF MSWINDOWS}
var LStream : TStream;
{$ENDIF}
begin
{$IFDEF MSWINDOWS}
Result := CopyFile(PChar(AFromFileName), PChar(AToFileName), AFailIfExists);
{$ELSE}
if FileExists(AToFileName) and AFailIfExists then
Result := False
else
begin
LStream := TFileStream.Create(AFromFileName, fmOpenRead or fmShareDenyWrite);
try
with TFileStream.Create(AToFileName, fmCreate) do
try
CopyFrom(LStream, 0);
finally
Free;
end;
finally
FreeAndNil(LStream);
end;
Result := True;
end;
{$ENDIF}
end;




Kitsystem
   - 31 mai 2005

Daniel,

Obrigado novamente pela ajuda.


Elter.teodoro
   - 31 mai 2005

Aproveitando o assunto de copia de arquivo ,veja como copiar um arquivo com bar de progresso em delphi/kylix



unit UCopiarArquivoComBarraProcesso;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
ProgressBar1: TProgressBar;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses Math;

{$R *.dfm}

function CopiaArquivo( Origem: String; Destino: String ; Progresso : TProgressBar ): Boolean;
const
TamanhoBuffer = 50000;
var
ArqOrigem,
ArqDestino: TFileStream;
pBuf: Pointer;
cnt: Integer;
totCnt, TamanhoOrigem: Int64;
begin
Result := True;
totCnt := 0;

try
ArqOrigem := TFileStream.Create(Origem, fmOpenRead or fmShareDenyWrite);
except
on E: Exception do
begin
Result := False;
Exit;
end;
end;

TamanhoOrigem := ArqOrigem.size;

with Progresso do
begin
min := 0;
Max := 100;
Position := 0;
end;


try
try
ArqDestino := TFileStream.Create(Destino, fmCreate or fmShareExclusive);
except
on E: Exception do
begin
Result := False;
Exit;
end;
end;

try
GetMem(pBuf, TamanhoBuffer);
try
cnt := ArqOrigem.Read(pBuf^, TamanhoBuffer);
cnt := ArqDestino.Write(pBuf^, cnt);
totCnt := totCnt + cnt;

while (cnt > 0) do
begin
cnt := ArqOrigem.Read(pBuf^, TamanhoBuffer);
cnt := ArqDestino.Write(pBuf^, cnt);
totcnt := totcnt + cnt;
Progresso.Position := Round((totCnt / TamanhoOrigem) * 100);
Application.ProcessMessages;
end;

finally
FreeMem(pBuf, TamanhoBuffer);
end;
finally
ArqDestino.Free;
end;
finally
ArqOrigem.Free;
end;
end;




procedure TForm1.Button1Click(Sender: TObject);
begin
if CopiaArquivo( ´C:\temp\sam30.2004-07-14_23_10.sql´, ´C:\temp\sam30.2004-07-14_23_10.txt´, ProgressBar1 ) then
ShowMessage( ´Arquivo copiado com sucesso!´ )
else
ShowMessage( ´Arquivo não pode ser copiado´ );
end;