Fórum Copiar arquivo para pasta, CD ou DVD #363310

28/08/2008

0

Olá,

Como faço para copiar um arquivo para um local que o usuario escolher. O arquivo é C:\Param.txt e preciso que seja copiado para o local que o usuario selecionar atraves do savedialog (pode ser uma pasta do Windows ou CD ou DVD), é o usuario que vai escolher. Obrigado.

Luiz


L_carlos

L_carlos

Responder

Posts

28/08/2008

Paulo

Essa rotina que eu estou te passando não sei funciona com o SaveDialog, mas copia de um lugar para outro. Se não der pelo SaveDialog, você pode parametrizar. Deve adicionar a Unit ShellApi na Uses.

var 
  sh:SHFILEOPSTRUCT; 
begin 
  sh.Wnd   := Handle; 
  sh.wFunc := FO_COPY; 
  sh.pFrom := PChar(´´C:\Temp1\Tabelas´+#0); 
  sh.pTo   := PChar(´´C:\Temp1\Programas´); 
  sh.fFlags := FOF_AllowUndo; 
  SHFileOperation(sh); 
end; 



Responder

Gostei + 0

28/08/2008

Paullsoftware

você poderia usar a função [b:9ff3f206e4]CopyFile[/b:9ff3f206e4] do proprio delphi!
ou então use a função abaixo que funciona perfeitamente!

Adicione um TGauge no form (paleta Samples)
Procedure CopiaArquivo(Origem, Destino: string; Gauge:TGauge);
var
  FromF,ToF: file of byte;
  Buffer: array[0..4096] of char;
  NumRead: Integer;
  FileLength: LongInt;
  NewPath: string;
begin
  // Antes de copiar, verifica se já existe o diretório
  // Caso o diretório não exista, o mesmo vai ser criado
  NewPath := ExtractFilePath(Destino);
  if not DirectoryExists(NewPath) then
  begin
    CreateDir(NewPath);
  end;
  // Copia o arquivo
  // Abre o arquivo de origem e cria o arquivo destino
  AssignFile(FromF, Origem);
  Reset(FromF);
  AssignFile(ToF, Destino);
  ReWrite(ToF);
  FileLength := FileSize(FromF);
  with Gauge do
  begin
    Progress := 0;
    MinValue := 0;
    MaxValue := FileLength;
    while FileLength > 0 do
    begin
      BlockRead(FromF, Buffer[0], SizeOf(Buffer), NumRead);
      FileLength := FileLength - NumRead;
      BlockWrite(ToF, Buffer[0], NumRead);
      AddProgress(NumRead);
    end;
    Progress := 0;
    CloseFile(FromF);
    CloseFile(ToF);
  end;
end;


Modo de usar a função

CopiaArquivo(´C:\ArquivoOrigem.txt´,´C:\PastaDestino\ArquivoCopiado.txt´,Gauge1);
espero ter ajudado :wink:


Responder

Gostei + 0

28/08/2008

Álison Bissoli

obrigado pela função, me ajudou também.


Responder

Gostei + 0

29/08/2008

L_carlos

Grato pelas dicas, mas eu encontrei outra dica que usava o savedialog (vide abaixo) e funciona blza se o usuario escolheruma pasta qualquer do windows para salvar o arquivo, mas não funciona se ele escolher a unidade do gravador de CD para gravar o arquivo no CD, dá erro de NÃO É POSSIVEL COPIAR O ARQUIVO. ACESSO NEGADO.
Eu acho que é porque para gravar no CD tem que usar um programa especifico para gravação, não tenho certeza. Alguem saberia como resolver esse problema? Grato.

Rotina que funciona para gravar em pasta:

caminho := ‘C:\Param.txt;

dlgsDialog := TSaveDialog.Create(nil);
dlgsDialog.Filter := ´Arquivos Texto (*.txt)|*.txt|´ ;


caminho2 := dlgsdialog.GetNamePath + ´Param.txt´ ;

if dlgsDialog.Execute then
begin
FillChar(Dados,SizeOf(Dados), 0);
with Dados do
begin
wFunc := FO_COPY;
pFrom := PChar(caminho);
pTo := PChar(caminho2);
fFlags:= FOF_ALLOWUNDO;
end;
SHFileOperation(Dados);
end;


Luiz


Responder

Gostei + 0

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

Aceitar