Array
(
)

Erro com função CopyFile

Cabelo
   - 09 ago 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


Keitarosan
   - 09 ago 2004


Citação:
...arquivo do servidor para o micro local...


Sintaxe do CopyFile:
boolean CopyFile(pchar caminho_do_arquivo_existente, pchar caminho_do_arquivo_novo, boolean 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);


Cabelo
   - 10 ago 2004

Colega..

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


Cabelo


Keitarosan
   - 10 ago 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?


Cabelo
   - 10 ago 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..


Marcelo Saviski
   - 10 ago 2004


Citação:

Citação:
DeleteFile(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.



Cabelo
   - 10 ago 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


Keitarosan
   - 10 ago 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:

#Código

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;



Cabelo
   - 10 ago 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;


Keitarosan
   - 10 ago 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:

#Código

CopyFile(PChar(v_servidor), PChar(v_local), true);


o certo no seu caso, seria:
#Código
CopyFile(PChar(v_local), PChar(v_servidor), true);


o primeiro parametro é o arquivo de origem, e você disse no seu comentário acima que a origem é v_local e o segundo parametro é o destino, no seu código é v_servidor

Logo, seu código ficaria assim:

#Código
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;



Cabelo
   - 11 ago 2004

Colega..

Muito obrigado pela dica..

Deu certo..

Valeu..

até mais..

Cabelo