Página 1 de 1
Excluir arquivos antigos
Enviado: 03 Mar 2007 13:45
por Clipper
Prezados Colegas
Preciso de uma função que me permitar excluir arquivos antigos.
Exemplo :
A função vai numa determinada pasta e exclui todos os arquivos com data inferior ou igual a 15/01/2007.
Desde já agradeço.
Marcelo
Re: Excluir arquivos antigos
Enviado: 03 Mar 2007 15:34
por Maligno
Não sei se funciona, pois acabei de digitar:
Código: Selecionar todos
// Exemplo de uso
clear
? "Apagados: "+ LTrim(Str(DelFilesF("d:\x\*.com",CtoD("01/01/2000")))) + " arquivos"
?
// cSpec => nome do caminho com a especificação (ex: c:\tmp\*.bak)
// dLimit => data limite para manter os arquivos (se <=, será apagado)
//
function DelFilesF(cSpec,dLimit)
local cDir := Left(cSpec,RAt("\",cSpec))
local aDir := Directory(cSpec)
local nCnt := 0
AEval(aDir,{|aFile|if(aFile[3]<=dLimit, FErase(cDir+aFile[1],nCnt++), nil)})
return nCnt
Mas, ao invés de informar uma data limite, para tornar a função mais genérica, você poderia informar um bloco com uma regra que, no bloco que avalia a matriz, retornaria um valor lógico, permitindo ou não o apagamento.
[]'s
Maligno
http://www.buzinello.com/prg
Enviado: 03 Mar 2007 15:47
por rochinha
Amiguinho
Faça uso da função DIRECTORY().
Ela retorna um array multidimensional contendo as colunas NOME(char), TAMANHO(char), DATA(data), TIME(char).
Com base neste array voce cria a critica para deleção com FERASE()
Enviado: 03 Mar 2007 17:43
por Clipper
Obrigado Maligno e Rochinha !
A função funcionou perfeitamente.
No inicio compilei do jeito que o Maligno postou mas não funcionou, foi só botar um SET DATE BRIT e pronto.
Na verdade eu já sabia como excluir, eu não estava sabendo fazer a critica dentro do bloco.
A linha no meu programa ficou resumida a isso :
AEVAL(DIRECTORY("\BR\NOTAS\*.ARJ"),{|AFILE|IF(AFILE[3]<=DATAPROC-10,FERASE(AFILE[1]),NIL)})
Pois pra mim é mais prático assim, porém considero a função completa do jeito do Maligno melhor pois é genérica e se aplica em qualquer caso.
Muito obrigado colegas !
Até logo.
Marcelo
Enviado: 03 Mar 2007 20:16
por rochinha
Amiguinho Clipper
Quando entrei no topico só tinha sua pergunta portante descarte a minha pois a do Maligno usa as mesmas funções e ja tá pronta.
Enviado: 03 Mar 2007 23:04
por Maligno
Clipper escreveu:No inicio compilei do jeito que o Maligno postou mas não funcionou, foi só botar um SET DATE BRIT e pronto.
Sabia que ia acabar esquecendo alguma coisa.
[]'s
Maligno
http://www.buzinello.com/prg
Enviado: 06 Mar 2007 08:02
por ederxc
-:] Amigo marcelão hehhe , ñ entendi pq vc teve dificudades para criar algo desse tipo , a ñ seer que vc teria em mente uma solução " By rocinha,maligno masters clipper pró ultra advanced ", pois para apagar poderia fazer uma simples pesquisa assim como vc falou entre data e data conforme vai achando , zap e skip ! ñ entendi heheehheheeh mais ta valendo ! Grande abraço pra galera !
´o)
Enviado: 06 Mar 2007 09:03
por Clipper
A questão é que eu queria apagar os arquivos do diretório, e isso é variável, num dia podem ser 20, no outro 25, no outro 10 e os nomes também são variaveis, ou seja, eu não sei de antemão quais são os arquivos, apenas sei que não quero os arquivos com mais de 10 dias de criados, não seria simplemente limpar um arquivo com ZAP, entendeu agora ?
Até logo.
Marcelo
Enviado: 06 Mar 2007 09:36
por ederxc
Acho que entendi sim, o que vc queria era uma coisa altomatica , rodando no sistema sem que vc esquente a cabeça em fiacar pesquisando e apagando o que deve ou ñ ser apagado ... seria isso ??
OBs: ñ estou fazendo nenhuma critica a vc , mesmo pq vc é um cara que sempre me ajuda , apenas fiz um comentario , pq achei um pouco estranho , desculpe se ofendi ! té ++
Enviado: 06 Mar 2007 09:54
por Clipper
Não foi ofensa nenhuma, eu achei que você não tinha entendido mesmo.
É que eu já exluia os arquivos normalmente mas todos, e o cliente pediu que eu deixasse os arquivos dos últimos 10 dias e não estava sabendo incluir a critica dentro do CodeBlock.
Eu usava assim :
AEVAL(DIRECTORY("\BR\NOTAS\*.ARJ"),{|AFILE|FERASE(AFILE[1])})
E queria colocar a crítica dentro dessa mesma linha, mas não lembrava como fazer.
Até logo.
Marcelo
Enviado: 06 Mar 2007 10:06
por Maligno
Clipper escreveu:AEVAL(DIRECTORY("\BR\NOTAS\*.ARJ"),{|AFILE|IF(AFILE[3]<=DATAPROC-10,FERASE(AFILE[1]),NIL)})
Em tempo: ia comentar e acabei esquecendo. Ao informar em FErase() qual arquivo apagar, acho uma boa idéia acrescentar o path, como fiz no meu exemplo. Assim, você não precisará estar no mesmo diretório onde se encontram os arquivos. Algo como:
Código: Selecionar todos
cDir := "\BR\NOTAS"
AEVAL(DIRECTORY(cDir+"*.ARJ"),{|AFILE|IF(AFILE[3]<=DATAPROC-10,FERASE(cDir+AFILE[1]),NIL)})
[]'s
Maligno
http://www.buzinello.com/prg