Fórum Copiar arquivo para pasta, CD ou DVD #363310
28/08/2008
0
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
Curtir tópico
+ 0Posts
28/08/2008
Paulo
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;
Gostei + 0
28/08/2008
Paullsoftware
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);
Gostei + 0
28/08/2008
Álison Bissoli
Gostei + 0
29/08/2008
L_carlos
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
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)