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: 1057
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: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

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: 1057
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: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

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: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
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: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

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: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
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: 1057
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: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

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, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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