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
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
Curtir tópico
+ 0
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
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;
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
Clique aqui para fazer login e interagir na Comunidade :)