Fórum Função CopyFile não funciona!!!!!!!! #319975
26/04/2006
0
procurei bastante material no fórum e achei um bocado de material sobre o assunto, mas nenhum deu jeito..
seguinte : eu gero um arquivo no raiz do computador por exemplo c:
depois preciso de copiar este arquivo para um diretório diferente, seja na rede ou no próprio micro local, usando a função copyfile, mas sempre resulta em false, alguém sabe o pq ??????
OBS : Não dá nenhuma mensagem de erro.
segue a rotina :
if CopyFile(PChar(´C:\´+ StringReplace(frmCO21011.
cdsOB0100.fieldbyname(´C_COD_OBRA´).AsString, ´/´, ´-´, [rfReplaceAll])+ ´.PDF´), PChar(dtvCaminho.directory), True) then
begin
MessageDlg(´Arquivo copiado com sucesso em : ´+ dtvCaminho.directory + lblNomeArquivo.Caption, mtConfirmation, [mbOk], 0);
end
else
begin
MessageDlg(´Erro ao copiar o arquivo !´, mterror, [mbOk], 0);
end;
Cabelo
Curtir tópico
+ 0Posts
26/04/2006
Massuda
O segundo parametro do CopyFile precisa incluir um nome de arquivo e dtvCaminho.directory parece ser apenas um nome de diretório.
O terceiro parametro diz se deve falhar se o arquivo já existir no destino e você está passando True.
Gostei + 0
26/04/2006
Cabelo
O segundo parametro do CopyFile precisa incluir um nome de arquivo e dtvCaminho.directory parece ser apenas um nome de diretório.[/quote:914895bd39]
Em relação a esse parâmetro, eu já tinha testado passando o nome do arquivo tb..
Tudo bem... mas não existe o arquivo no diretório que estou passando como parâmetro..
Gostei + 0
26/04/2006
Massuda
Em relação a esse parâmetro, eu já tinha testado passando o nome do arquivo tb..[/quote:340c31e5ec]De qualquer forma, esse parametro deve ser um nome de arquivo (opcionalmente) incluindo o caminho.
Para saber qual foi o código do erro que impediu a cópia, use GetLastError para obter o código numérico, por exemplo...
if CopyFile(.......) then begin ........ end else begin MessageDlg(´Erro ao copiar o arquivo (´ + IntToStr(GetLastError) + ´)´, mterror, [mbOk], 0); end;
Gostei + 0
26/04/2006
Cabelo
vc sabe o que é??????
Gostei + 0
26/04/2006
Massuda
Lembrei que dá para mostrar o texto correspondente ao código de erro fazendo algo assim...
MessageDlg(SysErrorMessage(GetlastError), mterror, [mbOk], 0);
Gostei + 0
26/04/2006
Cabelo
MessageDlg(SysErrorMessage(GetlastError), mterror, [mbOk], 0);
Valeu pela dica.... 8)
Mas e agora...??? não existe o arquivo no caminho especificado...
como resolver ????
Por Favor massuda... vc pode passar a sintaxe correta desta função...?
Gostei + 0
26/04/2006
Massuda
Em relação a esse parâmetro, eu já tinha testado passando o nome do arquivo tb..[/quote:1e450d1e5b]De qualquer forma, esse parametro deve ser um nome de arquivo (opcionalmente) incluindo o caminho.[/quote:1e450d1e5b]Passe como segundo parametro o nome do arquivo a ser criado.
Inclua código para testar se o arquivo já existe no destino; se existir, apague ele antes de fazer a cópia.
Gostei + 0
26/04/2006
Massuda
Gostei + 0
26/04/2006
Cabelo
o problema não era na função CopyFile...
era na função PChar.... ela não consegue converter um widestring para char...
só consegue converter string para char....
passei o caminho para variáveis... destino e origem do tipo string...
aí funcionou muito bem...
muito obrigado pela atenção..
Gostei + 0
26/04/2006
Massuda
Gostei + 0
26/04/2006
Cabelo
Não sou eu.....
o método directory retorna este tipo de dado...
dtvCaminho é um DirectoryTreeView... pois o savedialog no .CLX não funciona diretio, isto é.. só aceita gravar no diretório raiz da instalação do Windows..
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)