Excluir itens de uma pasta

Delphi

12/08/2008

Crio uma pasta, extraio um arquivo binário, gero um txt, varro esse txt e depois eu gravo em banco aquilo que me interessa. pergunta: Como faço, para depois disso tudo, limpar esta pasta, não deixar nada? Grato!!!


Paulo

Paulo

Curtidas 0

Respostas

Martins

Martins

12/08/2008

Crio uma pasta, extraio um arquivo binário, gero um txt, varro esse txt e depois eu gravo em banco aquilo que me interessa. pergunta: Como faço, para depois disso tudo, limpar esta pasta, não deixar nada? Grato!!!


Já tentou usar a função [b:aaaa268d84]DeleteFile[/b:aaaa268d84]?


Boa sorte e bons códigos.


GOSTEI 0
Carlosrm

Carlosrm

12/08/2008

Paulo,

apenas complementando a resposta do Martins, se quiser também deletar a Pasta (ou diretório, como era chamado antigamente), no Delphi 7 você pode usar a função RemoveDir. Porém, esta função só apaga diretórios que estejam vazios. Então, realmente será necessário usar o DeleteFile, como lembrou o Martins, para primeiro apagar cada um dos arquivos que estiverem na pasta/diretório a deletar. Por último, não confie plenamente na segurança dos arquivos/pasta apagados. Em algumas situações eles podem ser recuperados. Eu acho mais prudente alterar o conteúdo dos arquivos, antes de apagá-los. Se alguém recuperá-los, vai encontrar informação não aproveitável...

carlosrm


GOSTEI 0
Thiago Vidal

Thiago Vidal

12/08/2008

Cara, tive um problema parecido; escrevi uma função que apaga todos os arquivos e subpastas recursivamente de um determinado caminho.

Segue o código, talvez vc tenha que adaptar alguma coisa aí.

function RecursiveDelete(FullPath: string): Boolean;
var
  sr: TSearchRec;
  FullName: string;
begin
  Result := True;
  if (FindFirst(FullPath + ´\*.*´, faAnyFile, sr) = 0) then
  try
    repeat
      FullName := IncludeTrailingPathDelimiter(FullPath) + sr.Name;
      if (sr.Name <> ´.´) and (sr.Name <> ´..´) then
      begin
        if ((sr.Attr and faDirectory) = 0) then Result := DeleteFile(FullName)
        else Result := RecursiveDelete(FullName);
      end;
    until (FindNext(sr) <> 0) or not Result;
  finally
    FindClose(sr);
  end;
  Result := Result and DirectoryExists(FullPath) and RemoveDir(FullPath);
end;



GOSTEI 0
Paulo

Paulo

12/08/2008

Thiago, era exatamente isso. A única adaptação que tive que fazer, foi no RemoveDir, pois eu precisava apenas limpar a pasta e não removê-la. Martins, eu não usei o DeleteFile, porque para usar o DeleteFile é preciso informar o Path + Nome do Arquivo + Extensão, mas mesmo assim, agradeço a todos, agradeço mesmo. Valeu!!!!!


GOSTEI 0
Martins

Martins

12/08/2008

Thiago, era exatamente isso. A única adaptação que tive que fazer, foi no RemoveDir, pois eu precisava apenas limpar a pasta e não removê-la. Martins, eu não usei o DeleteFile, porque para usar o DeleteFile é preciso informar o Path + Nome do Arquivo + Extensão, mas mesmo assim, agradeço a todos, agradeço mesmo. Valeu!!!!!


Sem problemas [b:f8743f04b1]Paulo[/b:f8743f04b1], mas veja q a função o utiliza.

 if ((sr.Attr and faDirectory) = 0) then Result := DeleteFile(FullName) 


Mesmo assim, bons códigos e boa sorte.


GOSTEI 0
Paulo

Paulo

12/08/2008

Olá Martins, o que eu quiz dizer é que eu já havia utilizado o DeleteFile e sempre estava informando o Nome e a Extensão do arquivo. Confesso que não me atentei a essa linha do código, mas valeu assim mesmo.


GOSTEI 0
Rafael Vilela

Rafael Vilela

12/08/2008

Cara, tive um problema parecido; escrevi uma função que apaga todos os arquivos e subpastas recursivamente de um determinado caminho.

Segue o código, talvez vc tenha que adaptar alguma coisa aí.

function RecursiveDelete(FullPath: string): Boolean;
var
  sr: TSearchRec;
  FullName: string;
begin
  Result := True;
  if (FindFirst(FullPath + ´\\*.*´, faAnyFile, sr) = 0) then
  try
    repeat
      FullName := IncludeTrailingPathDelimiter(FullPath) + sr.Name;
      if (sr.Name <> ´.´) and (sr.Name <> ´..´) then
      begin
        if ((sr.Attr and faDirectory) = 0) then Result := DeleteFile(FullName)
        else Result := RecursiveDelete(FullName);
      end;
    until (FindNext(sr) <> 0) or not Result;
  finally
    FindClose(sr);
  end;
  Result := Result and DirectoryExists(FullPath) and RemoveDir(FullPath);
end;





Por acaso tiveram problema para excluir diretórios com longo path?
GOSTEI 0
POSTAR