Paulo Nobre Postado Abril 28, 2006 Denunciar Share Postado Abril 28, 2006 Tenho um programa(que usa banco de dados) que na pasta do executável contém uma pasta chamada Dados.Criei uma rotina para fazer backup desta pasta, ou seja, seriam copiados os arquivos e subpastas de dados para uma outra pasta chamada Backup.No oncreate do form o programa verifica se existe o diretório Backup, caso contrário cria esta pasta.Tipo If not DirectoryFileExist(Diretorio do programa\Backup) then Makedir......Para copiar estou usandovarDados: TSHFileOpStruct;begintable1.close//fecho a tabela aqui para poder copiarFillChar(Dados,SizeOf(Dados), 0);with Dados dobeginwFunc := FO_COPY;pFrom := PChar('Diretório do programa\Dados\*.*');pTo := PChar('Diretório do programa\Backup\');fFlags:= FOF_ALLOWUNDO;end;SHFileOperation(Dados);table1.open//Abro aqui para voltar a mostrarend;Acontece que as vezes aparece a mensagem de erroNão é posível copiar arquivo. Não é possível ler o arquivo ou disco de origem.Porém as vezes consigo copiar.Alguém saberia dizer o que pode estar havendo? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 paulobergo Postado Abril 28, 2006 Denunciar Share Postado Abril 28, 2006 Olá.Já me deparei com este problema... e como não consegui resolver (por exemplo, descobri que às vezes o programa achava que a tabela ainda estava em uso - sendo este talvez um dos motivos da falha), eu passei a usar o CopyFile(PChar('c:\dados\tabela1.db'),PChar('c:\backup\tabela1.db'),false) e depois verificar as datas e tamanhos para saber se realmente copiou... Aí funcionou....Quanto ao arquivo poder estar sendo considerado como "ainda aberto", descobri isso quando, depois de uma falha na tentativa de cópia, abri o DbExplorer e tentei criar um campo temporario (alter table 'tabela1.db' add temp integer) e recebi a mensagem "table busy"... sendo que a tabela não estava aberta (openfiles no XP e netwatch no win98 para checar)...Espero ter ajudado!P.Bergo Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Abril 28, 2006 Denunciar Share Postado Abril 28, 2006 O parâmetro pFrom de SHFileOperation é um array de strings, então deve ser inserido um #0 adicional dizendo que não há mais strings; pTo também segue o mesmo. Então dependendo do momento da chamada de SHFileOperation, se o próximo byte ao final da string de pFrom for um #0 ele funciona, senão não funciona.Tente:pFrom := PChar('Diretório do programa\Dados\*.*' + #0); pTo := PChar('Diretório do programa\Backup\' + #0); Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Nobre Postado Abril 28, 2006 Autor Denunciar Share Postado Abril 28, 2006 Obrigado a vocês, PauloBergo e s3c.Então pelo que entendi, embora achasse também que poderia ser pela tabela, o problema está no array.Para aproveitar o meu código vou tentar o que s3c sugeriu.Obrigado por mais esta. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Nobre Postado Abril 29, 2006 Autor Denunciar Share Postado Abril 29, 2006 Colocando #0 funcionou perfeitamente.Obrigado s3c. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Paulo Nobre
Tenho um programa(que usa banco de dados) que na pasta do executável contém uma pasta chamada Dados.
Criei uma rotina para fazer backup desta pasta, ou seja, seriam copiados os arquivos e subpastas de dados para uma outra pasta chamada Backup.
No oncreate do form o programa verifica se existe o diretório Backup, caso contrário cria esta pasta.
Tipo If not DirectoryFileExist(Diretorio do programa\Backup) then Makedir......
Para copiar estou usando
var
Dados: TSHFileOpStruct;
begin
table1.close//fecho a tabela aqui para poder copiar
FillChar(Dados,SizeOf(Dados), 0);
with Dados do
begin
wFunc := FO_COPY;
pFrom := PChar('Diretório do programa\Dados\*.*');
pTo := PChar('Diretório do programa\Backup\');
fFlags:= FOF_ALLOWUNDO;
end;
SHFileOperation(Dados);
table1.open//Abro aqui para voltar a mostrar
end;
Acontece que as vezes aparece a mensagem de erro
Não é posível copiar arquivo. Não é possível ler o arquivo ou disco de origem.
Porém as vezes consigo copiar.
Alguém saberia dizer o que pode estar havendo?
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
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.