Erro com função CopyFile
09/08/2004
0
CopyFile(PChar(v_local), PChar(v_servidor), true) dá erro.
Estou tentando copiar um arquivo do servidor para o micro local, mas quando faço assim :
try
if CopyFile(PChar(v_local), PChar(v_servidor), true) then
begin
winexec(PChar(v_local), v_show);
end;
except on E:Exception do
MessageDlg(´Erro ao copiar o arquivo : ´ + v_servidor +
#1310+
´Erro : ´+E.Message, mterror, [mbOk], 0);
end;
simplesmente não copia o arquivo, alguém sabe o pq?
Cabelo
Cabelo
Posts
09/08/2004
Keitarosan
Sintaxe do CopyFile:
[b:a037cd8667]boolean[/b:a037cd8667] CopyFile([b:a037cd8667]pchar[/b:a037cd8667] caminho_do_arquivo_existente, [b:a037cd8667]pchar[/b:a037cd8667] caminho_do_arquivo_novo, [b:a037cd8667]boolean[/b:a037cd8667] falhar_se_o_arquivo_for_existente)
Pelo que você falou que quer e o código que você está usando, parece que os parametros estão invertidos :wink:
Creio que o certo no seu caso, seria desse jeito:
CopyFile(PChar(v_servidor), PChar(v_local), true);
10/08/2004
Cabelo
Está correto, os caminhos não estão invertidos.. Mesmo assim não dá certo..
Cabelo
10/08/2004
Keitarosan
e tbm, uma outra questao, o arquivo já é existente no local para o qual vc quer copia-lo?
10/08/2004
Cabelo
Trim(s_clientgeral2.fieldbyname(´C_CAMINHO_SERVIDOR´).asstring + ´\´+s_clientgeral2.fieldbyname(´C_NOME_EXECUTAVEL´).asstring);
v_local := Trim(s_clientgeral3.fieldbyname(´C_CAMINHO_EXECUTAVEL´).asstring + ´\´+
s_clientgeral2.fieldbyname(´C_NOME_EXECUTAVEL´).asstring);
if FileExists(v_servidor) then
begin
DeleteFile(v_servidor);
if not CopyFile(PChar(v_servidor), PChar(v_local), true) then
begin
MessageDlg(´Não foi possível copiar o arquivo!´, mterror, [mbOk], 0);
end;
end
else
begin
if not CopyFile(PChar(v_servidor), PChar(v_local), true) then
begin
MessageDlg(´Não foi possível copiar o arquivo!´, mterror, [mbOk], 0);
end;
end;
continua dando erro..
10/08/2004
Marcelo Saviski
deste modo vc está deletando o arquivo antes de copia-lo, 1º copie do servidor p/ o local e depois delete.[/quote:a9a70d9aae]
10/08/2004
Cabelo
Não excluo o arquivo do servidor, mas sim da máquina onde vou copiar o arquivo do servido, veja :
v_servidor := copy(GetCurrentDir, 1, 3) +
Trim(s_clientgeral2.fieldbyname(´C_CAMINHO_SERVIDOR´).asstring + ´\´+s_clientgeral2.fieldbyname(´C_NOME_EXECUTAVEL´).asstring);
//caminho destino do arquivo
v_local := Trim(s_clientgeral3.fieldbyname(´C_CAMINHO_EXECUTAVEL´).asstring + ´\´+
s_clientgeral2.fieldbyname(´C_NOME_EXECUTAVEL´).asstring);
//caminho origem do arquivo
dessa forma não estou excluindo o arquivo origem..
sem mais
Cabelo
10/08/2004
Keitarosan
Assim não vai dar certo nao... :?
Sem contar que você fez uma outra coisa que pode ser melhorada:
if FileExists(v_servidor) then begin bla bla bla copia arquivo.. end else begin Aqui você não necessita tentar copiar arquivo nenhum, afinal de contas, ele nao existe, aqui é o SENÃO do FILEEXISTS... end;
10/08/2004
Cabelo
Não estou deletando o arquivo do servidor, estou deletando o arquivo na máquina que está pedindo a cópia :
v_servidor := copy(GetCurrentDir, 1, 3) +
Trim(s_clientgeral2.fieldbyname(´C_CAMINHO_SERVIDOR´).asstring + ´\´+s_clientgeral2.fieldbyname(´C_NOME_EXECUTAVEL´).asstring);
//caminho destino do arquivo
v_local := Trim(s_clientgeral3.fieldbyname(´C_CAMINHO_EXECUTAVEL´).asstring + ´\´+
s_clientgeral2.fieldbyname(´C_NOME_EXECUTAVEL´).asstring);
//caminho origem do arquivo
if FileExists(v_servidor)//caminho destino do arquivo then
begin
DeleteFile(v_servidor);
if not CopyFile(PChar(v_servidor), PChar(v_local) //caminho origem do arquivo, true) then
begin
MessageDlg(´Não foi possível copiar o arquivo!´, mterror, [mbOk], 0);
end;
end
else
begin
if not CopyFile(PChar(v_servidor), PChar(v_local), true) then
begin
MessageDlg(´Não foi possível copiar o arquivo!´, mterror, [mbOk], 0);
end;
end;
10/08/2004
Keitarosan
v_servidor -> destino do arquivo
v_local -> origem do arquivo
na minha opniao, como o arquivo vem do servidor e vai para a maquina, assim seria o correto:
v_local -> destino do arquivo
v_servidor -> origem do arquivo
Tá OK.
Já que você deixou claro agora como você está utilizando essas variaveis, o erro está nos parametros do CopyFile, estão invertidos:
CopyFile(PChar(v_servidor), PChar(v_local), true);
o certo no seu caso, seria:
CopyFile(PChar(v_local), PChar(v_servidor), true);
o primeiro parametro é o arquivo de [color=blue:9dd86c9948]origem[/color:9dd86c9948], e você disse no seu comentário acima que a origem é [color=blue:9dd86c9948][b:9dd86c9948]v_local[/b:9dd86c9948][/color:9dd86c9948] e o segundo parametro é o [color=darkred:9dd86c9948]destino[/color:9dd86c9948], no seu código é [color=darkred:9dd86c9948][b:9dd86c9948]v_servidor[/b:9dd86c9948][/color:9dd86c9948]
Logo, seu código ficaria assim:
v_servidor := copy(GetCurrentDir, 1, 3) + Trim(s_clientgeral2.fieldbyname(´C_CAMINHO_SERVIDOR´).asstring + ´\´ + s_clientgeral2.fieldbyname(´C_NOME_EXECUTAVEL´).asstring); //caminho destino do arquivo v_local := Trim(s_clientgeral3.fieldbyname(´C_CAMINHO_EXECUTAVEL´).asstring + ´\´+ s_clientgeral2.fieldbyname(´C_NOME_EXECUTAVEL´).asstring); //caminho origem do arquivo if FileExists(v_servidor){caminho destino do arquivo} then begin DeleteFile(v_servidor); if not CopyFile(PChar(v_local), PChar(v_servidor), true) then MessageDlg(´Não foi possível copiar o arquivo!´, mterror, [mbOk], 0); end else begin if not CopyFile(PChar(v_local), PChar(v_servidor), true) then MessageDlg(´Não foi possível copiar o arquivo!´, mterror, [mbOk], 0); end;
11/08/2004
Cabelo
Muito obrigado pela dica..
Deu certo..
Valeu..
até mais..
Cabelo
Clique aqui para fazer login e interagir na Comunidade :)