como apagar arquivos anteriores a data de hoje

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1058
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

como apagar arquivos anteriores a data de hoje

Mensagem 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.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2822
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP
Curtiu: 2 vezes

como apagar arquivos anteriores a data de hoje

Mensagem 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.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1058
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

como apagar arquivos anteriores a data de hoje

Mensagem 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.
Avatar do usuário
Daniel
Usuário Nível 3
Usuário Nível 3
Mensagens: 373
Registrado em: 13 Ago 2003 22:42
Localização: Apucarana - PR

como apagar arquivos anteriores a data de hoje

Mensagem por Daniel »

Porter

vc pode usar o comando FileDate()
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2822
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP
Curtiu: 2 vezes

como apagar arquivos anteriores a data de hoje

Mensagem 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
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
Vander
Usuário Nível 3
Usuário Nível 3
Mensagens: 214
Registrado em: 23 Jul 2004 01:43
Localização: João Monlevade - MG

como apagar arquivos anteriores a data de hoje

Mensagem 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
HbMake v1.17
xHarbour build 0.99.70 Intl. (SimpLex)
Borland C++ 5.5.1
fivewin 6.12 (FREE)
Workshop 4.5
MEdit
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4666
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Curtiu: 1 vez
Contato:

como apagar arquivos anteriores a data de hoje

Mensagem 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.
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
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

como apagar arquivos anteriores a data de hoje

Mensagem 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
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

como apagar arquivos anteriores a data de hoje

Mensagem 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
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2822
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP
Curtiu: 2 vezes

como apagar arquivos anteriores a data de hoje

Mensagem 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 ]
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

como apagar arquivos anteriores a data de hoje

Mensagem por asimoes »

Gostei Jairo!
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4666
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Curtiu: 1 vez
Contato:

como apagar arquivos anteriores a data de hoje

Mensagem 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.
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.
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1058
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

como apagar arquivos anteriores a data de hoje

Mensagem 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.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

como apagar arquivos anteriores a data de hoje

Mensagem 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.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20420
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

como apagar arquivos anteriores a data de hoje

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder