Fórum ler nomer de arquivos num diretorio e deletar aqueles conf. critério #414888

31/03/2012

0

saudações amigos sou novo na praia e preciso ler nomes de arquivos num diretório e identificar qual deles devem ser apagador conforme um critério especifico. tenho a seguinte rotina feita e apresenta erro : peço ajuda de amigos com conhecimento maior do que o meu, sem mais agradeço a ateção

var
b: string;
a: string;
d,c: string;
SR: TSearchRec;
I,E: integer;
F: Double;
g: Int64;
begin
a := caminho;//constante declarada
d := (FormatFloat(#####.000, (now)));
b := d + .ini;
I := FindFirst(caminho+*.ini, faAnyFile, SR);
while I = 0 do begin
begin
E:=pos(.ini,(SR.Name));
g:=Trunc(Now);
F:=g-50;
if E<F then
begin
DeleteFile(caminho+ SR.Name) ;
end;
I := FindNext(SR);
end;
end;
Marcio Teles

Marcio Teles

Responder

Posts

31/03/2012

Bruno Leandro

quais tipos de criterios seriam utilizados para exclusao, ex: extensão, conteudo, nome, etc
Responder

Gostei + 0

31/03/2012

Marcio Teles

Seriam arquivos do tipo *.ini com o nome seguindo este padrão 48521,21.ini ( não podendo ser diferente ) então seria feito um comparativo seguindo este critério 48521,21<48522,2 (exemplo) satisfeita esta condição então seria excluido o arquivo do diretório
Responder

Gostei + 0

01/04/2012

Sérgio Saibel

Ola...
Vc não poderia comparar com equals, uma vez que vc tem o nome do arquivo e o padrão de exclusão sendo strings??

Espero ter ajudado.
Responder

Gostei + 0

01/04/2012

Bruno Leandro

tenta fazer desta forma

var
b: string;
SR: TSearchRec;
I: integer;
F,E: Double;
g: Int64;
begin
I := FindFirst(caminho+*.ini, faAnyFile, SR);
F := 48522.2;
while I = 0 do begin
begin
E := StrToFloatDef(Copy(SR.Name,length(SR.Name)-11,8),99999.99);
if E < F then
begin
DeleteFile(caminho + SR.Name);
end;
I := FindNext(SR);
end;
end;
end;
Responder

Gostei + 0

01/04/2012

Marcio Teles

Bom dia Bruno, primeiro obrigado pela sua grande gentileza, eu apliquei a sua sujestão e foi apresentado o seguinte resultado, os nomes dos arquivos foram comparados com um valor cosntante 99999.99 ( apresentado em sua sujestão) sendo que o necessario seria a comparação do valor 48522.2 com o nome do arquivo buscado no diretório e caso satisfeita a condição (if E < F then) o arquivo seria deletado
Responder

Gostei + 0

01/04/2012

Marcio Teles

Bom dia Mandola, eu não conheço esta sua sujestão como seria ?
Responder

Gostei + 0

01/04/2012

Marcio Teles

Bruno não tenho serteza,mas seria necessaria a bosca do nome do arquivo sem a extensão . caso voce possa me ajudar qual seria esse metodo para aplicar sua sujetão
var
b: string;
SR: TSearchRec;
I: integer;
F,E: Double;
g: Int64;
begin
I := FindFirst(caminho+*.ini, faAnyFile, SR);
F := 48522.2;
while I = 0 do begin
begin
E := StrToFloatDef(Copy(SR.Name,length(SR.Name)-11,8),****NOME DO ARQUIVO*****);
if E < F then
begin
DeleteFile(caminho + SR.Name);
end;
I := FindNext(SR);
end;
end;
end;
Responder

Gostei + 0

01/04/2012

Bruno Leandro

na verdade o comando StrToFloatDef(Copy(SR.Name,length(SR.Name)-11,8),99999.99)
esta copiando os 8 ultimos caracteres do nome exceto a extensão ou seja
o arquivo com o nome xxxx_12345.67.ini irá copiar 12345.67, caso não esteja neste tipo de formato
ele irá definir o valor 99999.99 para que esse arquivo não sejá excluido, caso esteja no formato informado
irá realizar a comparação com o parametro informado.
Responder

Gostei + 0

01/04/2012

Marcio Teles

Foi entendido a sua explicação Bruno, o problema é que nesta condição esta sendo deletado todos os arquivos com formato expecifico,mas a condição que foi imposta pra min é que deve ser comparado valores ( tipo Double) ou seja ...

if E < F then // se o nome do arquivo ( já convertido em Float ) for menor que um outro Float (E)
begin
DeleteFile(caminho + SR.Name);//deletar o arquivo com o nome F e somente ele
end;
Responder

Gostei + 0

02/04/2012

Sérgio Saibel

Ola...

Da uma olhada neste link, pode ser util

http://www.delphibasics.co.uk/Method.asp?NameSpace=System&Class=String&Type=Class&Method=Compare

Espero ter ajudado.
Responder

Gostei + 0

02/04/2012

Sérgio Saibel

Ola...
Vc não poderia comparar com equals, uma vez que vc tem o nome do arquivo e o padrão de exclusão sendo strings??

Espero ter ajudado.


Desculpe equals não se aplica ao delphi.
Responder

Gostei + 0

02/04/2012

Marco Salles

Só copiei e colei um tópico que eu respondi

partir da versão delphi 2010 a uses IOUtils; tem classes
especificas para esta finalidade


Código:
var
path:string;
begin
if not TDirectory.Exists(D:\envio) then
raise Exception.Create(Invalid Path);
for path in TDirectory.GetFiles(D:\envio\,*.xml,
TSearchOption.soTopDirectoryOnly) do
showmessage(TPath.GetFileName(path));


Perceba temos ainda a opção de
de filtrar os resultados retornados .. Por exemplo Arquivos com
tamanho de tantos Kb , ou com data de criação a partir de , ou modificados , com determinado Nome especifico etc...

Por exemplo

Código:
var
path:string;
Filtro : TDirectory.TFilterPredicate;
begin
if not TDirectory.Exists(D:\envio) then
raise Exception.Create(Invalid Path);
Filtro := function(const Path: string; const SearchRec: TSearchRec): Boolean
begin
Result := (TDirectory.GetCreationTime(Path) < date - 10)
end;
for path in TDirectory.GetFiles(D:\envio,*.xml,
TSearchOption.soTopDirectoryOnly,filtro) do
showmessage(TPath.GetFileName(path));
end;


Voce filtra os resultados somente os arquivos com data de criação dos
últimos dez dias . enfim uma série de possibilidades

Tópico Original

http://www.activedelphi.com.br/forum/viewtopic.php?t=71008&highlight=tdirectory&sid=31c9e57b0818e35c496a65a557322895
Responder

Gostei + 0

03/04/2012

Sérgio Saibel

E ai colega conseguiu excluir os arquivos??
Responder

Gostei + 0

03/04/2012

Marcio Teles

Obrigado pela força Mandola, mas ainda não deu serto vou usar a sujestão do Marcos...realmente é um desafio que não esperava dar este trabalho todo mas, repito agradeço muito a ajuda de vocês companheiros, e quem tiver alguma outra sujestão fica o meu agradecimento . Eu estarei nessa empreitada até o dia 05/04/12, caso não consigua vou ter que abortar a missão
Responder

Gostei + 0

03/04/2012

Marcio Teles

Marco a sua sujestão apresenta como resultado o nome e a extensão ou seja todos os arquivos sendo que questão seria somente arquivos tipo *.ini sem a sua extenção. Agradeço a sua ajuda... ....meu amigo ...tó sem ideias
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar