Erro com função CopyFile
Colegas
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
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
Curtidas 0
Respostas
Keitarosan
09/08/2004
...arquivo do servidor para o micro local...
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);
GOSTEI 0
Cabelo
09/08/2004
Colega..
Está correto, os caminhos não estão invertidos.. Mesmo assim não dá certo..
Cabelo
Está correto, os caminhos não estão invertidos.. Mesmo assim não dá certo..
Cabelo
GOSTEI 0
Keitarosan
09/08/2004
Nunca vi o CopyFile falhar se o erro nao fosse do usuario, mas vamos ver... Tem como você postar aqui o conteudo das variaveis v_servidor e v_local?
e tbm, uma outra questao, o arquivo já é existente no local para o qual vc quer copia-lo?
e tbm, uma outra questao, o arquivo já é existente no local para o qual vc quer copia-lo?
GOSTEI 0
Cabelo
09/08/2004
v_servidor := copy(GetCurrentDir, 1, 3) +
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..
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..
GOSTEI 0
Marcelo Saviski
09/08/2004
[quote:a9a70d9aae=´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]
[b:a9a70d9aae]DeleteFile[/b:a9a70d9aae](v_servidor);
if not CopyFile(PChar(v_servidor), PChar(v_local), true) then
deste modo vc está deletando o arquivo antes de copia-lo, 1º copie do servidor p/ o local e depois delete.[/quote:a9a70d9aae]
GOSTEI 0
Cabelo
09/08/2004
Marcelo..
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
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
GOSTEI 0
Keitarosan
09/08/2004
Saviski tah certo... você está deletando o arquivo que está no servidor e logo após tenta copia-lo...
Assim não vai dar certo nao... :?
Sem contar que você fez uma outra coisa que pode ser melhorada:
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;
GOSTEI 0
Cabelo
09/08/2004
Colega..
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;
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;
GOSTEI 0
Keitarosan
09/08/2004
Poutzz... você inverteu o nome das variaveis cara... quer dizer, talvez não tenha invertido, as vezes sua maneira lógica de pensar tenha sido essa:
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:
o certo no seu caso, seria:
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 -> 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;
GOSTEI 0
Cabelo
09/08/2004
Colega..
Muito obrigado pela dica..
Deu certo..
Valeu..
até mais..
Cabelo
Muito obrigado pela dica..
Deu certo..
Valeu..
até mais..
Cabelo
GOSTEI 0