Ir para conteúdo
Fórum Script Brasil
  • 0

Problema Ao Copiar Arquivos


Solid Snake

Pergunta

Olá pessoal, tudo bem? Este é o meu primeiro post aqui no fórum, espero ajudar bastante e ser ajudado também biggrin.gif

Sou programador de Delphi numa empresa de São Paulo e estamos desenvolvendo um pequeno sistema em Delphi5 + DBaseIV. O problema acontece quando tenho que copiar um arquivo X de uma pasta Y para outra pasta Z.

Quando rodo o executável (ou rodo ele pela IDE do Delphi com 'F9'), não é retornado nenhum erro, porém o arquivo não é copiado. Se eu coloco um ponto de parada no meio do caminho e vou debugando e acompanhando as linhas com 'F8', a cópia é feita normalmente.

Eu usei várias funções que encontrei na net e mesmo aquelas WinExec e CopyFile, porém o comportamento é o mesmo.

Como disse estou usando Delphi5. O sistema operacional é Windows 2000 Professional Sp4 (com NTFS).

Alguém já viu isso acontecer? Alguém já passou por isso e sabe como resolver?

Obrigado!

Snake.

Link para o comentário
Compartilhar em outros sites

14 respostass a esta questão

Posts Recomendados

  • 0

bom primeiro veja se o arquivo é realmente copiado

if (copyfile(pchar(caminho do arquivo), pchar(destino), false)) then

showmessage('copiou') else showmessage('não copiou');

Bom o computador nunca erra o erro sempre é humano, então se der não

copiou que é óbvio que vai dar, verifique os caminhos...

Vamos supor que você queira copiar o arquivo c:\a.txt para c:\Windows

então seria

copyfile(pchar('c:\a.txt'), pchar('c:\Windows\a.txt'), false);

acho que no destino você deve tar esquecendo de adicionar o nome do novo arquivo?

se o caminho a ser copiado é uma variável, então não se esqueça do

delimitador de caminho \ no final exemplo

você quer copiar c:\a.txt para C:\Windows, se a variável tiver C:\Windows

então o erro seria

copyfile(pchar('c:\a.txt'), pchar('c:\Windowsa.txt'), false);

então sempre use IncludeTrailingBackslash pra garantir exemplo:

path := IncludeTrailingBackslash(path);

onde IncludeTrailingBackslash adiciona a \ no final de um caminho caso não tenha.

qlq coisa posta ai

abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Olá amigo Churc, obrigado pela resposta!

Com relação à nome de arquivo para destino, ele realmente está dentro de uma variável. Os caminhos de origem e destino estão ok's e a barra de diretório está la.

Seguindo o seu raciocínio, coloquei a função CopyFile dentro de um If. A função retornou a mensagem que a cópia foi feita, porém o arquivo não está na pasta blink.gif

Talvez acarrete problema por ser uma unidade criada com o comando "subst" do Windows? Talvez, pelo nome do arquivo de destino estar dentro de uma variável, a cópia não pode ser feita? Vou testar, e posto de volta.

Abs[]

Snake.

Link para o comentário
Compartilhar em outros sites

  • 0

Nada feito... não rolou, alguém tem mais alguma idéia?

Amigo jcvijr, o que você quis dizer com caminho absoluto e relativo? Não entendi, desculpe a ignorância... rolleyes.gif

Link para o comentário
Compartilhar em outros sites

  • 0
Nada feito... não rolou, alguém tem mais alguma idéia?

Amigo jcvijr, o que você quis dizer com caminho absoluto e relativo? Não entendi, desculpe a ignorância... rolleyes.gif

Olá Solid Snake,

você poderia postar seu código?, acho que ficaria mais fácil pra tentar lhe ajudar.

Abs. Progr'amador. wink.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Nada feito... não rolou, alguém tem mais alguma idéia?

Amigo jcvijr, o que você quis dizer com caminho absoluto e relativo? Não entendi, desculpe a ignorância...  rolleyes.gif

Olá Solid Snake,

você poderia postar seu código?, acho que ficaria mais fácil pra tentar lhe ajudar.

Abs. Progr'amador. wink.gif

Olá amigo Programador! Segue:

ShellFileOperation(strbase+'\sdqgrnc.dbf', strtransm_rec+'\'+wNumIntern+'r.dbf', 2);
Esta seria a função para cópia. Sobre as variáveis: * strbase-string que contém o valor da pasta onde está a base de dados / origem * strtransm_rec-string que contém o valor da pasta de destino * wNumIntern-string que consta o nome do arquivo a ser copiado / campo da tabela que fornece o nome do arquivo Abaixo a funçaõ ShellFileOperation:
{Copia arquivo(s) de um diretorio para outro}
{Usar opcao 2 para copia no FLAG}
procedure ShellFileOperation(fromFile: string; toFile: string; Flags: Integer);
var
  shellinfo: TSHFileOpStructA;
begin
  with shellinfo do
  begin
    wnd   := Application.Handle;
    wFunc := Flags;
    pFrom := PChar(fromFile);
    pTo   := PChar(toFile);
  end;
  SHFileOperation(shellinfo);
end;
{Fim da procedure 17}

O engraçado é que ela funciona em outro projeto qualquer... e até outras como eu disse antes (caso da CopyFile) também não funcionam neste projeto atual.

Obrigado!

Snake.

Link para o comentário
Compartilhar em outros sites

  • 0

Acredito que o problema esteja na passagem de parâmetros; pois o parâmetro pFrom da estrutura TSHFileOpStructA é um array de strings; portanto você deve adicionar um #0 no final de pFrom dizendo que não há mais strings.

Adicione um #0 no final do parâmetro pTo também.

Link para o comentário
Compartilhar em outros sites

  • 0
Acredito que o problema esteja na passagem de parâmetros; pois o parâmetro pFrom da estrutura TSHFileOpStructA é um array de strings; portanto você deve adicionar um #0 no final de pFrom dizendo que não há mais strings.

Adicione um #0 no final do parâmetro pTo também.

Amigo s3c,

Passo #0 dentro da string?

Abs[]!

Snake.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá

já tentou usar da forma simples mesmo:

CopyFile(strbase+'\sdqgrnc.dbf', strtransm_rec+'\'+wNumIntern+'r.dbf', True);

ou faça um teste, coloque os diretorios mesmo, tipo (só pra testar):

CopyFile('c:\pasta\arquivo.dbf', 'c:\pasta\arquivo.dbf', True);

Pergunto: o nome do arquivo colado e diferente do copiado?

Tambem já passei por várias situações desse tipo, cheguei até pensar em bug do Delphi tongue.gif , já tive situações em que não deu certo de forma alguma, mesmo estando correta a função, ai resolvi abrir um novo projeto só pra teste e deu certinho!!! blink.gif

muito louco, mas ate hoje não tive explicação para tal situação!

Abs. Progr'amador. wink.gif

Link para o comentário
Compartilhar em outros sites

  • 0

INACREDITÁVEL!!!

Fechei o parâmetro com #0 fora da string e FUNCIONOU!!!

Partindo deste princípio, creio que todas as funçoes que se utilizam desse tipo de mecanismo devam receber no final esse comando... seria isso uma limitação do Windows???

Muito obrigado à todos que me ajudaram!!!

Abs[]

Snake.

Link para o comentário
Compartilhar em outros sites

  • 0

INACREDITÁVEL!!!

Fechei o parâmetro com #0 fora da string e FUNCIONOU!!!

Partindo deste princípio, creio que todas as funçoes que se utilizam desse tipo de mecanismo devam receber no final esse comando... seria isso uma limitação do Windows???

Muito obrigado à todos que me ajudaram!!!

Abs[]

Snake.

Não é uma limitação. É que o parâmetro pFrom é difinido para receber um array de strings; ou seja; você pode passar vários nomes de arquivos nesse parâmetro e é por isso que você deve terminar com um #0 adicional dizendo que não há mais nomes a seguir.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá

já tentou usar da forma simples mesmo:

CopyFile(strbase+'\sdqgrnc.dbf', strtransm_rec+'\'+wNumIntern+'r.dbf', True);

ou faça um teste, coloque os diretorios mesmo, tipo (só pra testar):

CopyFile('c:\pasta\arquivo.dbf', 'c:\pasta\arquivo.dbf', True);

Pergunto: o nome do arquivo colado e diferente do copiado?

Tambem já passei por várias situações desse tipo, cheguei até pensar em bug do Delphi  tongue.gif , já tive situações em que não deu certo de forma alguma, mesmo estando correta a função, ai resolvi abrir um novo projeto só pra teste e deu certinho!!!  blink.gif

muito louco, mas ate hoje não tive explicação para tal situação!

Abs. Progr'amador.  wink.gif

Acho que a explicação está no momento da chamada da função.

Se o próximo byte da memória no final do parâmetro pFrom for um #0, aí funciona, senão não funciona.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...