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

(Resolvido) Search and Delete


jaumDoDelphi

Pergunta

Ola Amigos do Script Brasil.

Estou querendo fazer um programa para deletar 3 tipos de arquivos.

Em varios PCS.

Atualmente eu utilizo um Arquivo BAT no iniciar do windows.

com o seguinte comando:

del *.iws /s /q
del *.kdb /s /q
del *.wif /s /q
pause

Esses Arquivos são criados pelo programa utilizado aqui na verdade são arquivos TMP.

Eu peguei um exemplo antigo parecido que o Douglas_soares postou Localiza e Copia.

Mas n estou conseguindo Adaptar o codigo para Localiza e Deleta.

Da ultima vez que tentei adaptar este codigo acabei deletando um monte de arquivos da minha HD :lol:

Se alguém poder me ajudar eu agradeço muito! :)

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Não vou te ajudar nesse momento pois cheguei da escola agora e vou dar uma jogadinha, rsrsrsrs, se ninguém te responder até amanha eu te dou uma força, tenho mt serviço amanha =/ mas no sabado to livre, rsrsrs então até lá!

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Vou postar este "monstro", mas é só impressão, porque na verdade ela pode fazer um pouco mais do que você precisa. Na real, para você bastaria basicamente a funçõa DeleteFilesOnPath. Mas, ela deve funcionar direitinho.

// Esta procedure exclui todos os arquivos localizados em um diretório, conforme mascara
// PATH = diretório onde os arquivos serão pesquisados (observar que é concatenada a contra-barra)
// FILEMASK = mascara identificando o tipo do arquivo a ser removido - apenas um tipo (ex. *.tmp)
// LogList = corresponde a uma lista onde serão armazenados os resultados (é um log do processo)
procedure DeleteFilesOnPath(Path, FileMask :string; LogList: TStrings);
var
  SearchRec :TSearchRec;
begin
  LogList.Add(Format('=> Pesquisando pasta [%s] - [%s]', [Path, FileMask]));
  if FindFirst(Path+'\'+FileMask, faArchive, SearchRec) = 0 then
  try
    repeat
      Application.ProcessMessages;
      if not DeleteFile(Path +'\' +SearchRec.Name) then
        LogList.Add(' *** Erro apagando arquivo: '+SearchRec.Name)
      else
        LogList.Add(' ->'+SearchRec.Name +' - Ok');
    until FindNext(SearchRec) <> 0;
  finally
    FindClose(SearchRec);
  end;
end;

// Esta procedure exclui todos os arquivos localizados a partir de um diretório, recursivamente, conforme mascaras
// STARTPATH = diretório a partir do qual os arquivos serão pesquisados, incluindo sub-diretórios (observar que é concatenada a contra-barra)
// FILEMASK = mascara identificando os tipos dos arquivos a ser removido - vários tipo (ex. *.tmp;*.dat;*.log;)
// LogList = corresponde a uma lista onde serão armazenados os resultados (é um log do processo)
procedure DeleteFilesOnPathRecursive(StartPath, FileMask :String; LogList: TStrings);
var
  TmpMask :string;
  SearchRec :TSearchRec;
begin
 // busca primeira entra de um diretório dentro do diretório em StartPath
  if FindFirst(StartPath +'\*.*', faDirectory, SearchRec) = 0 then
  try
    repeat
      Application.ProcessMessages;
      if (SearchRec.Name <> '..') then
      begin
       // para cada diretório, irá excluir uma extensão contida na lista de máscaras
        TmpMask := FileMask;
        while TmpMask <> '' do
        begin
          Application.ProcessMessages;
          DeleteFilesOnPath(StartPath, Copy(TmpMask, 1, 5), LogList);
          Delete(TmpMask, 1, 6);
        end;
      // exclusão recursiva - sub-diretórios apenas
        if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then
          DeleteFilesOnPathRecursive(StartPath+'\'+SearchRec.Name, FileMask, LogList);
      end;
    until FindNext(SearchRec) <> 0;
  finally
    FindClose(SearchRec);
  end;
end;

procedure DeleteFiles(StartPath, FileMask :String; RecursiveDir: Boolean; LogList: TStrings);
begin
  if not RecursiveDir then
  begin
    while FileMask <> '' do
    begin
      Application.ProcessMessages;
      DeleteFilesOnPath(StartPath, Copy(FileMask, 1, 5), LogList);
      Delete(FileMask, 1, 6);
    end;
  end else
    DeleteFilesOnPathRecursive(StartPath, FileMask, LogList);
end;
No programa, o uso é simples. Eu coloquei apenas um TMemo e um Botão, mas a interface fica a seu cargo. Voce pode por um checkbox para indicar se devem ser processados os sub-diretórios ou não:
procedure TForm1.Button1Click(Sender: TObject);
var
  FileMask :String;
begin
  Memo1.Lines.Clear;
  FileMask := '*.tmp;*.log;*.ini;*.dat;';  // esta string pode ser obtida do usuário de alguma forma
  DeleteFiles('C:\WINDOWS\Temp', FileMask, False, Memo1.Lines);  // FALSE = Exclusão só na pasta expecificada
//  DeleteFiles('C:\WINDOWS\Temp', FileMask, True, Memo1.Lines);  // TRUE = Exclusão recursiva a partir da pasta indicada
end;

Para os testes, aconselho a comentar a linha que exclui os arquivos (DeleteFile), localizada na procedure DeleteFilesOnPath.

T+

Link para o comentário
Compartilhar em outros sites

  • 0

Grande! Micheus, extamente o que eu queria.

Este Codigo funcionou perfeitamente!

E ainda melhor, ele Gera um LOG no TMemo.

Dai fica mais facil de saber o que ele esta excluindo.

Apos Exluir os arquivos vou salvar em um arquivo LOG com a data local.

Realmente muito Obrigado!!!

RESOLVIDO

É Douglas Soares, estudar cansa mesmo. Lembro no tempo da Faculdade e Ainda

tinha que trabalhar Acordava as 5 da manha e só ia dormir a Meia Noite.

Foram 4 Anos muito Cansativos mas valeu muito apena!

Lembro que na epoca 2000 a 2004 estava no Auge as LANHOUSE, era minha valvula de escape aos Sabados.

Só Trabalho e Estudo n da certo temos que ter um momento para a Diversão!

Ainda hoje raramente jogo DODSource e Left4Dead.

Editado por jaumDoDelphi
Link para o comentário
Compartilhar em outros sites

  • 0
Apos Exluir os arquivos vou salvar em um arquivo LOG com a data local.

Só para lembrar, isto é tarefa simples:

TMemo1.Lines.SaveToFile(<nome do arquivo>);

A flexibilidade no parâmetro (TStrings), lhe da a possibilidade de não mostrar nada durante o processo (em um TMemo ou TListBox) e apenas ao final você gerar o arquivo de log, uma vez que você pode criar uma variável TStringList na procedure e passá-la como parâmetro.

O uso das procedures independentes do form, lhe permite colocá-las em uma outra unit para que seja facilmente utilizadas por outros projetos.

beleza.

Link para o comentário
Compartilhar em outros sites

  • 0
É Douglas Soares, estudar cansa mesmo. Lembro no tempo da Faculdade e Ainda

tinha que trabalhar Acordava as 5 da manha e só ia dormir a Meia Noite.

Foram 4 Anos muito Cansativos mas valeu muito apena!

Lembro que na epoca 2000 a 2004 estava no Auge as LANHOUSE, era minha valvula de escape aos Sabados.

Só Trabalho e Estudo n da certo temos que ter um momento para a Diversão!

Ainda hoje raramente jogo DODSource e Left4Dead.

kkkk, faculdade? rsrssr tenho 16 anos, eu to no segundo colegial ainda huhusauha, tem gente que nem acredita que eu programo :wacko: , qualquer dia nois marca um jogo de Left4Dead no garena!!! :P

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

KKKK mesmo, Douglas!

Essas Juventudes de Hj!

Daqui a 10 anos teremos Pessoas de 6 anos já sendo expert em PC!

realmente é surpreendente você sendo tão jovem, tendo este vasto conhecimento!

Me admira muito!

achei que você tinha uns 20 e poucos!

Mas idade n importa! O importante é você continuar sendo a mesmo pessoa

Gente Boa que sempre ajuda a galera do FORUM!

Cara, Pensar que meu filho hj tem 4 anos! Mas daqui alguns anos

Ele vai saber bem mais doque Eu :lol:

Abraços!

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...