GARANTIR DESCONTO

Fórum Função CopyFile não funciona!!!!!!!! #319975

26/04/2006

0

Colegas...

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

Cabelo

Responder

Posts

26/04/2006

Massuda

if CopyFile(PChar(´C:\´+ StringReplace(frmCO21011. cdsOB0100.fieldbyname(´C_COD_OBRA´).AsString, ´/´, ´-´, [rfReplaceAll])+ ´.PDF´), PChar(dtvCaminho.directory), True) then
Acho que pode ter dois problemas...

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.


Responder

Gostei + 0

26/04/2006

Cabelo

[quote:914895bd39=´Cabelo´]if CopyFile(PChar(´C:\´+ StringReplace(frmCO21011. cdsOB0100.fieldbyname(´C_COD_OBRA´).AsString, ´/´, ´-´, [rfReplaceAll])+ ´.PDF´), PChar(dtvCaminho.directory), True) then
Acho que pode ter dois problemas...

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..

O terceiro parametro diz se deve falhar se o arquivo já existir no destino e você está passando True.


Tudo bem... mas não existe o arquivo no diretório que estou passando como parâmetro..


Responder

Gostei + 0

26/04/2006

Massuda

[quote:340c31e5ec=´Massuda´]O segundo parametro do CopyFile precisa incluir um nome de arquivo e dtvCaminho.directory parece ser apenas um nome de diretório.


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;



Responder

Gostei + 0

26/04/2006

Cabelo

Retornou o erro 80

vc sabe o que é??????


Responder

Gostei + 0

26/04/2006

Massuda

80 significa que o arquivo já existe.

Lembrei que dá para mostrar o texto correspondente ao código de erro fazendo algo assim...
MessageDlg(SysErrorMessage(GetlastError), mterror, [mbOk], 0);



Responder

Gostei + 0

26/04/2006

Cabelo

80 significa que o arquivo já existe. Lembrei que dá para mostrar o texto correspondente ao código de erro fazendo algo assim...
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...?


Responder

Gostei + 0

26/04/2006

Massuda

[quote:1e450d1e5b=´Cabelo´][quote:1e450d1e5b=´Massuda´]O segundo parametro do CopyFile precisa incluir um nome de arquivo e dtvCaminho.directory parece ser apenas um nome de diretório.


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.


Responder

Gostei + 0

26/04/2006

Massuda

A propósito, acho que todos os SOs que tem sistemas de arquivos não deixam você criar um arquivo com o mesmo nome de um diretório, já que o diretório geralmente é um arquivo especial do SO.


Responder

Gostei + 0

26/04/2006

Cabelo

Massuda....

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..


Responder

Gostei + 0

26/04/2006

Massuda

era na função PChar.... ela não consegue converter um widestring para char...
Apenas curiosidade... porque você está usando WideString? A não ser que você esteja fazendo software para usar na Arábia Saudita ou na China (ou qualquer pais que não use o alfabeto romano), não há necessidade de usar WideString.


Responder

Gostei + 0

26/04/2006

Cabelo

[quote:2864a7eb97=´Cabelo´]era na função PChar.... ela não consegue converter um widestring para char...
Apenas curiosidade... porque você está usando WideString? A não ser que você esteja fazendo software para usar na Arábia Saudita ou na China (ou qualquer pais que não use o alfabeto romano), não há necessidade de usar WideString.[/quote:2864a7eb97]

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..


Responder

Gostei + 0

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

Aceitar