Tenho uma rotina no programa que copia arquivos de uma pasta para outra, de acordo com uma máscara... colocarei esta rotina aqui pra ficar mais claro.
procedure TfrmEstoqPrincipal.mnuBackupClick(Sender: TObject);
var
PastaOrigem, PastaDestino, Mascara: string;
begin
PastaOrigem := ExtractFileDir(ParamStr(0))+'\DATABASE\';
if PastaOrigem = '' then Exit;
DlgSelPasta.CaptionTitle := 'BACKUP DE ARQUIVOS';
DlgSelPasta.Caption := 'ESCOLHA A PASTA DE DESTINO:';
if DlgSelPasta.Execute then
begin
PastaDestino := DlgSelPasta.SelectedFolder;
if PastaDestino = '' then Exit;
Mascara := 'E*.DBF';
if Mascara = '' then Exit;
CopiaArquivos(PastaOrigem,PastaDestino,Mascara);
Mascara := 'F*.DBF';
if Mascara = '' then Exit;
CopiaArquivos(PastaOrigem,PastaDestino,Mascara);
end;
end;
////////////////////////////////////////////////////////////////////////////////
///// EFETUA COPIA DE ARQUIVOS SEGUNDO UMA MASCARA ENTRE ORIGEM E DESTINO ////
////////////////////////////////////////////////////////////////////////////////
procedure CopiaArquivos (dOrigem, dDestino, dMascara: string);
var
Dados: TSHFileOpStruct; // procedimento de cópia pelo Shell do Windows
sSepar: String;
begin
if dOrigem[Length(dOrigem)]='\' then sSepar:=''
else sSepar:='\';
dOrigem:=dOrigem+sSepar;
if dDestino[Length(dDestino)]='\' then sSepar:=''
else sSepar:='\';
dDestino:=dDestino+sSepar;
if (dMascara[1]='*') and not (dMascara[2]='.') then
dMascara:='?'+dMascara;
FillChar(Dados,SizeOf(Dados), 0);
with Dados do
begin
wFunc := FO_COPY;
pFrom := PChar(dOrigem+dMascara);
pTo := PChar(dDestino);
fFlags:= FOF_ALLOWUNDO;
end;
SHFileOperation(Dados);
end;
Pois bem... as máscaras são E*.DBF e F*.DBF porque os arquivos que quero copiar são começados em E e F ....
Existe um outro arquivo, nesta pasta, chamado TABELA.DBF ...
Aí ocorre o seguinte:
Quando coloco a mascara := 'TABELA*.DBF', este arquivo é copiado normalmente...
Mas quando a mascara := 'E*.DBF' ou 'F*.DBF', ocorre o seguinte erro
Não é possível copiar arquivo. Não é possível ler o arquivo ou disco de origem.
O curioso é que isso ocorre em um programa... Mas em um outro programa, eu utilizo essa mesma rotina, sem mudar uma letra sequer, e funciona tudo corretamente.
Declarei ShellAPI nos dois programas... E estou achando que está faltando algum outro detalhe neste programa que não está funcionando.
Alguém sabe me dizer se é preciso alguma outra coisa, além do ShellAPI para esta função de cópia funcionar? Algum detalhe que pode ter passado despercebido por mim?
Pergunta
Gabriel Cabral
Boa tarde, amigos.
Tenho uma rotina no programa que copia arquivos de uma pasta para outra, de acordo com uma máscara... colocarei esta rotina aqui pra ficar mais claro.
Pois bem... as máscaras são E*.DBF e F*.DBF porque os arquivos que quero copiar são começados em E e F ....
Existe um outro arquivo, nesta pasta, chamado TABELA.DBF ...
Aí ocorre o seguinte:
Quando coloco a mascara := 'TABELA*.DBF', este arquivo é copiado normalmente...
Mas quando a mascara := 'E*.DBF' ou 'F*.DBF', ocorre o seguinte erro
Não é possível copiar arquivo. Não é possível ler o arquivo ou disco de origem.
O curioso é que isso ocorre em um programa... Mas em um outro programa, eu utilizo essa mesma rotina, sem mudar uma letra sequer, e funciona tudo corretamente.
Declarei ShellAPI nos dois programas... E estou achando que está faltando algum outro detalhe neste programa que não está funcionando.
Alguém sabe me dizer se é preciso alguma outra coisa, além do ShellAPI para esta função de cópia funcionar? Algum detalhe que pode ter passado despercebido por mim?
Muito obrigado.
Editado por Gabriel CabralLink para o comentário
Compartilhar em outros sites
2 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.