Copiar arquivos entre diretórios [ nome longo ]

Delphi

18/05/2004

:?: Olá a todos.
Em meu sistema preciso copiar arquivos de diversas origens (pastas) diferentes para um destino fixo.
O problema é que os arquivos que preciso copiar são arquivos de música com nome original e eles tem o nome longo.
Além disso ficam armazenados em pastas com nomes também longos.
Exemplo: C:\Musicas\Popular Brasileira\Roberto Carlos\Especial 2000\Amor a Moda Antiga.Mp3
Tentei com CopyFile mas ele não acha o arquivo.
Alguém pode me dar uma dica de como fazer este tipo de cópia.
Obrigado.
Neto


Neto

Neto

Curtidas 0

Respostas

Fabio.hc

Fabio.hc

18/05/2004

Fiz um teste de duas formas e funcionou normal:

procedure TForm1.Button1Click(Sender: TObject);
var Origem, Destino:string;
begin
   Origem := ´C:\Musicas\Popular Brasileira\Roberto Carlos\Especial 2000\Amor a Moda Antiga.MP3´;
   Destino := ´D:\Arquivos de Programas\Arquivos comuns\Borland Shared\Database Desktop\PrivDir\Amor a Moda Antiga.MP3´;
   CopyFile(PChar(Origem), PChar(Destino), true);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   CopyFile(´C:\Musicas\Popular Brasileira\Roberto Carlos\Especial 2000\Amor a Moda Antiga.MP3´,´D:\Arquivos de Programas\Arquivos comuns\Borland Shared\Database Desktop\PrivDir\Amor a Moda antiga.MP3´,True)
end;



GOSTEI 0
Neto

Neto

18/05/2004

Olá Fabio, obrigado pela dica, mas talves seja então a origem da informação que não esta dando certo.
Observe o meu código abaixo (será que pode ser por causa do ListBox??)
===========
procedure TocarMusica;
var
m_path , m_musica , m_origem , m_destino , m_msg: string;
begin

// --- < Pega a primeira musica da lista >

M_Path := FrTocarMusicas.ListBoxPath.Items[0];
M_Musica := FrTocarMusicas.ListBoxMusica.Items[0];

M_origem := PChar(M_path);
M_destino := PChar( ´C:\Tmp\´ + m_musica) ;

// -- Copia a musica para o diretorio e toca a musica

===> Aqui ocorre o erro......

If not CopyFile(PChar(m_origem), PChar(m_destino), true) then
Begin
M_msg := ´Erro Copiando Arquivo ´ + #13 + 10 + ´(Error Code: ´ + IntToStr(Bass_ErrorGetCode)+´)´;
MessageBox(0, PChar(m_msg), ´Erro:´ , Mb_IconError or Mb_ok);
End;

M_musica := ´c:\Tmp\Musica.Mp3´;
Channel := BASS_StreamCreateFile(FALSE, PChar(M_Musica), 0, 0, 0);
BASS_StreamPlay(Channel , False, 0);

end;

Abraços Neto.


GOSTEI 0
Neto

Neto

18/05/2004

Olá Fabio, obrigado pela dica, mas talves seja então a origem da informação que não esta dando certo.
Observe que copio um arquivo de origem variavel para um destino fixo e com nome também fixo.O código está abaixo (será que pode ser por causa do ListBox??).
===========
procedure TocarMusica;
var
m_path , m_musica , m_origem , m_destino , m_msg: string;
begin

// --- < Pega a primeira musica da lista >

M_Path := FrTocarMusicas.ListBoxPath.Items[0];
M_Musica := FrTocarMusicas.ListBoxMusica.Items[0];

M_origem := PChar(M_path);
M_destino := PChar( ´C:\Tmp\´ + m_musica) ;

// -- Copia a musica para o diretorio com o nome Musica.Mp3 e toca a musica

===> Aqui ocorre o erro Codigo 0 ......

If not CopyFile(PChar(m_origem), PChar(m_destino), true) then
Begin
M_msg := ´Erro Copiando Arquivo ´ + #13 + 10 + ´(Error Code: ´ + IntToStr(Bass_ErrorGetCode)+´)´;
MessageBox(0, PChar(m_msg), ´Erro:´ , Mb_IconError or Mb_ok);
End;

M_musica := ´c:\Tmp\Musica.Mp3´;
Channel := BASS_StreamCreateFile(FALSE, PChar(M_Musica), 0, 0, 0);
BASS_StreamPlay(Channel , False, 0);

end;

Abraços Neto.


GOSTEI 0
Fabio.hc

Fabio.hc

18/05/2004

Talvez seja este o erro.

Se o arquivo já existir no destino, a função falha (não copia).
Para que a função possa sobreescrever o arquivo destino (caso exista), altere o último parâmetro de CopyFile para [b:3045f417d0]false[/b:3045f417d0]


GOSTEI 0
Neto

Neto

18/05/2004

Não existe o arquivo na origem.
Além disso testei também como False.
Alguém tem outra dica???
Abraços


GOSTEI 0
Neto

Neto

18/05/2004

Quero dizer não existe no destino...


GOSTEI 0
Fabio.hc

Fabio.hc

18/05/2004

Uma pergunta?

Neste listbox FrTocarMusicas.ListBoxPath vc grava só o caminho da musica ou o caminho e o nome da musica?

M_Path := FrTocarMusicas.ListBoxPath.Items[0];
M_Musica := FrTocarMusicas.ListBoxMusica.Items[0];


Se for só o caminho então:

M_origem := PChar(M_path[b:67cce08934] + m_musica[/b:67cce08934]);
M_destino := PChar( ´C:\Tmp\´ + m_musica) ;


GOSTEI 0
Neto

Neto

18/05/2004

Ok. já deu certo. Consegui copiar o arquivo com o nome original
para uma pasta.
Agora preciso renomear o arquivo (nome original) para ´Musica.Mp3´.
Estou usando a função RenameFile(NomOld,NomNew), e esta apresentando um erro.
De qualquer forma agradeço a ajuda...
Neto


GOSTEI 0
POSTAR