Copiar arquivo para pasta, CD ou DVD
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
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
Curtidas 0
Respostas
Paulo
28/08/2008
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;
GOSTEI 0
Paullsoftware
28/08/2008
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)
Modo de usar a função
espero ter ajudado :wink:
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
Álison Bissoli
28/08/2008
obrigado pela função, me ajudou também.
GOSTEI 0
L_carlos
28/08/2008
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
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