Erro com função CopyFile

09/08/2004

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


Cabelo

Respostas

09/08/2004

Keitarosan

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


Responder Citar

10/08/2004

Cabelo

Colega..

Está correto, os caminhos não estão invertidos.. Mesmo assim não dá certo..


Cabelo


Responder Citar

10/08/2004

Keitarosan

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?


Responder Citar

10/08/2004

Cabelo

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


Responder Citar

10/08/2004

Marcelo Saviski

[quote][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]


Responder Citar

10/08/2004

Cabelo

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


Responder Citar

10/08/2004

Keitarosan

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:

  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;



Responder Citar

10/08/2004

Cabelo

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;


Responder Citar

10/08/2004

Keitarosan

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:

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&93;, 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, &91;mbOk&93;, 0);
  end;



Responder Citar

11/08/2004

Cabelo

Colega..

Muito obrigado pela dica..

Deu certo..

Valeu..

até mais..

Cabelo


Responder Citar