Erro com função CopyFile

09/08/2004

0

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

Cabelo

Responder

Posts

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

10/08/2004

Cabelo

Colega..

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


Cabelo


Responder

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

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

10/08/2004

Marcelo Saviski

[quote:a9a70d9aae=´Marcelo Saviski´]
[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

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

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

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

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], 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;



Responder

11/08/2004

Cabelo

Colega..

Muito obrigado pela dica..

Deu certo..

Valeu..

até mais..

Cabelo


Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar