Excluir arquivos antigos

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Excluir arquivos antigos

Mensagem 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
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Excluir arquivos antigos

Mensagem 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
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mensagem 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()
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem 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
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mensagem 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.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem 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)
C:\Xharbour\Xdev\Fw\VSX
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem 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
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem 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é ++
C:\Xharbour\Xdev\Fw\VSX
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem 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
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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
Responder