Página 1 de 2
como apagar arquivos anteriores a data de hoje
Enviado: 09 Jan 2016 10:26
por porter
ola pessoal, gostaria de saber se tem como apagar determinados arquivos com datas anteriores a data de hoje, encontrei varios exemplos para apagar arquivos mas sem determinar uma condição.
obrigado.
xHarbour.
como apagar arquivos anteriores a data de hoje
Enviado: 09 Jan 2016 11:44
por Jairo Maia
Olá Porter,
Nos dê mais informações do que leva você a precisar disso. Veja que é uma coisa muito perigosa, e acrescento
sinistra.
Porém, esclareça as seguintes questões por exemplo:
porter escreveu:como apagar determinados arquivos
É muito amplo isso. Quais são exatamente esses determinados arquivos?
porter escreveu:com datas anteriores a data de hoje
A data anterior a hoje é referente a que: data da última alteração, ou data de criação do arquivo?
É perfeitamente possível fazer o que você quer. Mas pessoalmente gostaria de ser convencido da razão disso.
como apagar arquivos anteriores a data de hoje
Enviado: 09 Jan 2016 12:28
por porter
Olá Jairo, tem uma pasta, que guardo varios arquivos para relatorios com extensao txt para ser impresso com o W32PRN, eu apenas nao quero deixar acumular arquivos, deixando apenas os relatorios gerados na data de hoje e os anteriores a data de hoje serem deletados. A data que eu me refiro e a data da geracao do arquivo.txt
obrigado.
como apagar arquivos anteriores a data de hoje
Enviado: 09 Jan 2016 13:40
por Daniel
Porter
vc pode usar o comando FileDate()
como apagar arquivos anteriores a data de hoje
Enviado: 09 Jan 2016 15:57
por Jairo Maia
Olá Pessoal,
Daniel escreveu:vc pode usar o comando FileDate()
Não testei, mas acho que FileDate() como outras funções nativas retornam a data de modificação, não de criação.
Porter, veja o exemplo abaixo. Note que está usando a CLASSE FileInfo. Caso sirva, você tem que colocar essa classe em algum .PRG seu:
Código: Selecionar todos
Function Main()
Local x, aFiles, cFile, aFileInfo, oFileInfo, dDataHoje:=Date(), cPastaFiles
SET DATE BRIT
SET CENTURY ON
cPastaFiles := "C:\MinhaPasta\MinhaSubPasta\" // coloque aqui o caminho da pasta...
aFiles := Directory( cPastaFiles + "*.TXT" ) // pasta e tipo de arquivo...
For x=1 To Len( aFiles )
Clear Screen
cFile := cPastaFiles + "\" + aFiles[ x, 1 ] // caminho e nome do arquivo...
oFileInfo := FileInfo():new( cFile ) // envia a Classe FileInfo...
?
? "Nome do arquivo............=> ", oFileInfo:fileName
? "Tamanho....................=> ", oFileInfo:fileSize
? "Atributos..................=> ", oFileInfo:fileAttr
?
? "Data da criação............=> ", oFileInfo:createDate
? "Hora da criação............=> ", oFileInfo:createTime
?
? "Data da última alteração...=> ", aFiles[ x, 3 ]
? "Data da última alteração...=> ", aFiles[ x, 4 ]
?
/*
Cuidado. Descomente e/ou altere aqui por sua conta e risco...
*/
If oFileInfo:createDate < dDataHoje
If Alert( "Apagar o arquivo:;;" + cFile + "?;;Pressione ESC para encerrar...", { "Nao", "Sim" } ) = 2
//FErase( cFile )
EndIf
If LastKey() = 27
Return Nil
EndIf
EndIf
Next
Return Nil
/*
CLASS FileInfo
*/
#include "hbclass.ch"
#include "error.ch"
CLASS FileInfo
PROTECTED:
DATA cFileName INIT ""
DATA aInfo INIT { "", 0, CtoD(""), 0, CtoD(""), 0 }
METHOD getInfo
EXPORTED:
METHOD init
ACCESS fileName INLINE ::cFileName
ASSIGN fileName(c) INLINE ::getInfo(c)
ACCESS fileAttr INLINE ::aInfo[1]
ACCESS fileSize INLINE ::aInfo[2]
ACCESS createDate INLINE ::aInfo[3]
ACCESS createTime INLINE TString( ::aInfo[4] )
ACCESS changeDate INLINE ::aInfo[5]
ACCESS changeTime INLINE TString( ::aInfo[6] )
ENDCLASS
METHOD init( cFileName ) CLASS FileInfo
IF Valtype( cFileName ) == "C"
::getInfo( cFileName )
ENDIF
RETURN self
METHOD getInfo( cFileName ) CLASS FileInfo
IF .NOT. File( cFileName )
RETURN ::error( "File not found" , ;
::className(), "getInfo" , EG_ARG, {cFileName} )
ENDIF
::cFileName := cFileName
FileStats( cFileName, @::aInfo[1], ;
@::aInfo[2], ;
@::aInfo[3], ;
@::aInfo[4], ;
@::aInfo[5], ;
@::aInfo[6] )
RETURN self
como apagar arquivos anteriores a data de hoje
Enviado: 09 Jan 2016 18:33
por Vander
Olá Porter;
Se entendi,
Tenho algo parecido, ou seja deixo em uma pasta temporária apenas arquivos gerados no dia, faço assim:
Tenho um arquivo chamado ATUALIZA.DBF que grava a data da última execução do aplicativo.
No início do main()
Código: Selecionar todos
USE ATUALIZA // arq. de controle da última execução
IF VLN00 < DATE() // VLN00 = campo date (gravo este campo na saída do sistema)
AEVAL(DIRECTORY("C:\TEMP2\*.DBF"),{|aFile| FErase("C:\TEMP2\"+aFile[1])})
ENDIF
e na saída do sistema
Código: Selecionar todos
USE ATUALIZA // arq. de controle da última execução
REPLACE VLN00 WITH DATE()
CLOSE DATABASE
Não esquecer dos tratamentos devidos (localização do arquivo, rede, etc)
Vander
como apagar arquivos anteriores a data de hoje
Enviado: 10 Jan 2016 01:17
por rochinha
Amiguinhos,
Segue minha dica mais didatica possivel:
Código: Selecionar todos
cExtensao := "XML"
CONTADOR := ADIR( "*."+cExtensao )
IF CONTADOR != 0
DECLARE TXT_NOMES[ CONTADOR ]
ADIR( "*."+cExtensao, TXT_NOMES )
FOR CONTADOR := 1 TO LEN( TXT_NOMES )
//
...faço alguma coisa com o arquivo
cFile := TXT_NOMES[CONTADOR]
NEXT
ENDIF
No primeiro momento o ADIR() retorno o numero de arquivo da extensão passada. Critico se retornou uma contagem, declaro um vetor com o tamanho de itens contados, e com a mesma função preencho o vetor passando-o como parâmetro.
A laço FOR..NEXT fará outros procedimentos a meu mando.
O
Jairo Maia te apresentou a função Directory(), que retorna um vetor onde uma das colunas tem as datas do arquivo, bastará percorrer o vetor 1 criticando o vetor 3 ou 4.
O
Vander te apresentou AEVAL(), que avalia vetores e que recebeu um codeblock para analisar, mas este mesmo codeblock pode receber um terceiro parâmetro para critica.
Os dois métodos são avançados ao meu ver.
Consulte os parâmetros e retornos em
ClipX.
como apagar arquivos anteriores a data de hoje
Enviado: 10 Jan 2016 09:08
por asimoes
Se eu entendi e...
Se estiver errado podem corrigir por favor.
Não testei.
Obs.: O vetor da função Directory no primeiro elemento, nome do arquivo não considera o path, tem que informar se for apagar em uma pasta especifica.
ExcluiArq("*.TXT")
Código: Selecionar todos
FUNCTION ExcluiArq(cArq, cDir)
LOCAL aDir, I
hb_Default(@cArq, "*.*")
hb_Default(@cDir, hb_DirBase()) //pasta onde o executável está rodando por padrão.
aDir := Directory(cArq)
IF Len(aDir) > 0
FOR I:=1 TO Len(aDir)
IF (DTOS(aDir[I,3]) < DTOS(Date()))
fErase(cDir+aDir[I,1])
ENDIF
NEXT
ENDIF
RETURN Nil
como apagar arquivos anteriores a data de hoje
Enviado: 10 Jan 2016 09:41
por asimoes
Tem essa outra função que eu uso.
LimparTemp(hb_DirBase()+"*.TXT", 1)
Código: Selecionar todos
FUNCTION LimparTemp(cArq, nDias)
LOCAL cFile
hb_Default(@nDias, 10)
cFile := FileSeek(cArq)
DO WHILE !Empty(cFile)
IF FileDate() <= Date() - nDias
IF hb_FileExists(cFile)
FileDelete(cFile)
ENDIF
ENDIF
cFile := FileSeek()
ENDDO
RETURN Nil
como apagar arquivos anteriores a data de hoje
Enviado: 10 Jan 2016 10:23
por Jairo Maia
Olá Pessoal,
Jairo Maia escreveu:A data anterior a hoje é referente a que: data da última alteração, ou data de criação do arquivo?
porter escreveu:A data que eu me refiro e a data da geracao do arquivo.txt
Todas as funções apresentadas pelos colegas são simples e de fácil entendimento. Porém, optei por usar a Classe FileInfo, que está no exemplo que postei, porque o autor do tópico disse preferir fazer a checagem pela data de CRIAÇÃO do arquivo. Os exemplos dos colegas retornam apenas a data da última alteração.
Se pela data de alteração não fizer diferença, concordo que o autor do tópico pode usar uma das que foi apresentada pelos demais colegas, por ser mais simples de entender e usar.
Editado:
Uma correção... Na linha em meu exemplo onde coloquei:
Código: Selecionar todos
cFile := cPastaFiles + "\" + aFiles[ x, 1 ] // caminho e nome do arquivo...
Precisa tirar essa barra que está a mais e impede o exemplo de funcionar. Tem que ser assim:
Código: Selecionar todos
cFile := cPastaFiles + aFiles[ x, 1 ] // caminho e nome do arquivo...
Também onde coloquei:
Código: Selecionar todos
? "Data da última alteração...=> ", aFiles[ x, 3 ]
? "Data da última alteração...=> ", aFiles[ x, 4 ]
Na verdade a última linha é a hora da última alteração:
Código: Selecionar todos
? "Data da última alteração...=> ", aFiles[ x, 3 ]
? "Hora da última alteração...=> ", aFiles[ x, 4 ]
como apagar arquivos anteriores a data de hoje
Enviado: 10 Jan 2016 12:40
por asimoes
Gostei Jairo!
como apagar arquivos anteriores a data de hoje
Enviado: 10 Jan 2016 12:43
por rochinha
Amiguinhos,
...Porém, optei por usar a Classe FileInfo, que está no exemplo que postei, porque o autor do tópico disse preferir fazer a checagem pela data de CRIAÇÃO do arquivo. Os exemplos dos colegas retornam apenas a data da última alteração.
Realmente, as funções ADIR() e Directory() são simples no quesito quantidade de informação e uma classe nova pode trazer mais dados importantes que as padrão não trazem.
como apagar arquivos anteriores a data de hoje
Enviado: 11 Jan 2016 14:17
por porter
ola pessoal, optei por usar a rotina que o colega Jairo Maia passou, muito obrigado pela atenção de todos, não apenas resolvi meu problema, mas aprendi bastante tambem.
obrigado.
como apagar arquivos anteriores a data de hoje
Enviado: 12 Jan 2016 13:14
por asimoes
Prezados,
Voltando ao assunto, tem alguma função que me retorne a data de criação do diretório, não a de atualização.
como apagar arquivos anteriores a data de hoje
Enviado: 13 Jan 2016 19:26
por JoséQuintas
Já foi resolvido, mas acrescentar minha opinião:
ë até melhor a data de alteração, sinal de que realmente não usa mais.
Eu uso o bom e velho Directory() e limito os arquivos a 4 horas de "idade".
Para temporários, uso a pasta temporária do Windows, porque arquivo local é muito mais rápido do que na rede.
De quebra, a rotina acaba fazendo uma limpeza dessa pasta.
Foi bom pro meu servidor: o Windows tem limite de arquivos, e já tive problemas com a pasta temp.