Funcao para copiar arquivos no Kylix?

30/05/2005

0

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


Kitsystem

Kitsystem

Responder

Posts

31/05/2005

Dopi

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

{-----------------------------------------------------------------------------
 *** 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;




Responder

31/05/2005

Kitsystem

Daniel,

Obrigado novamente pela ajuda.


Responder

31/05/2005

Elter.teodoro

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;


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar