Página 1 de 2

usando o FileStats

Enviado: 06 Out 2008 20:18
por Jarbas
Pessoal , boa noite , estou usando o filestats para pegar o tamanho do arquivo , a data e hora de criacao do EXE e tb a data de alteração do mesmo.
Preciso compara o EXE do Terminal com o EXE do Servidor , se for diferente o sistema vai dar uma mensagem para o operador rodar a atualização .

O problema é q sempre retorna a hora diferente , se tentei a "nCreateTime" e tb a "nChangeTime"

Faço assim :

Código: Selecionar todos

cFileName   := "c:\mysistemas\FAT.EXE"

FileStats( cFileName , @cFileAttr  , @nFileSize  , ;
                        @dCreateDate, @nCreateTime, ;
                        @dChangeDate, @nChangeTime  )

lA_Local_Exe_Hr:=left(TString(nCreateTime),5)

cFileName    := "Z:\FAT\FAT.EXE"

FileStats( cFileName , @cFileAttr  , @nFileSize  , ;
                        @dCreateDate, @nCreateTime, ;
                        @dChangeDate, @nChangeTime  )

lA_Servidor_Exe_Hr:=left(TString(nCreateTime),5)


if lA_Local_Exe_Hr!=lA_Servidor_Exe_Hr
   Alert("O SISTEMA DEVERÁ SER ATUALIZADO.  Hora no Servidor : "+lA_Servidor_Exe_Hr+"  Hora no Terminal: "+lA_Local_Exe_Hr)
   QUIT
endif
Se alguem puder me ajudar ficarei muito grato .

Abs
Jarbas

-------------------------------
Nota de Moderação (Toledo): mensagem editada para colocar a tag [ code ]
Veja mais detalhes: faq.php?mode=bbcode#f21

Re: usando o FileStats

Enviado: 14 Out 2008 10:14
por Eolo
Para os dois arquivos terem a mesma data de criação (CREATE) ou modificação (CHANGE), primeiro os relógios dos dois PCs têm que estar rigorosamente sincronizados (hora, minuto, segundo), o que não é muito fácil de conseguir. Depois, isso conseguido, os arquivos têm que ser criados ou modificados nos 2 PCs no mesmo exato momento (hora, minuto e segundo)...

Que tal abandonar a hora e conferir só a data? Se a data de criação do EXE Servidor for maior que a data do EXE Terminal, você dispara a atualização.

Re: usando o FileStats

Enviado: 27 Out 2008 11:46
por sambomb
Eolo, a data de criação do arquivo não e por PC, pelo menos a data exibida pelo Windows, tanto é que... se você for pegar arquivos de um CD antigo e passar para seu computador vai ter a mesma data...
no caso dele, o arquivo compilado seria apenas copiado para o terminal não tendo sido alterado mantendo assim data e hora original... o que pode estar acontecendo é que o FileStats retorne um outro tipo de data, como data de acesso.

OBS.: nas propriedades do arquivo você tem 3 datas diferentes:
Criado
Modificado
Acessado

Re: usando o FileStats

Enviado: 27 Out 2008 12:38
por Eolo
Não é o que dá aqui pra mim, usando WinXP e Win2000. Fiz vários testes e, na cópia de um arquivo do C: para o G:, por exemplo, deu o que segue.

A data/hora de criação no C: é uma (anterior) e a data/hora de criação no G: é outra (posterior). Isso faz sentido, porque os arquivos foram criados em diferentes data/hora. A data é a mesma, só porque eu criei os 2 arquivos hoje. Mas a HORA é diferente, óbvio.

(talvez num esquema de HD em RAID (vários discos espelhados sendo gravados simultaneamente) vc consiga data/hora iguais em 2 ou mais HDs. Mas isso eu não posso afirmar, não tenho conhecimento a respeito)

Já a data/hora de modificação é a mesma, já que eu só copiei o arquivo, sem o alterar (nem no C: nem no G:). Quanto à data/hora de acesso, não sei se o Clipper ou o xHarbour a captura. Também nunca procurei nada a respeito, porque essa informação não me interessou ainda.

Ah, também testei copiando um arquivo de um CD para um HD. Mesma coisa acima. A diferença é que, no CD, a data/hora de acesso aparece em branco.


EM TEMPO: a função FileStats(), pra mim, funciona corretamente, trazendo as datas/horas de criação e modificação. Eu a uso para capturar a data/hora de criação da pasta onde meus programas foram instalados (um dos itens anti-pirataria...).

Re: usando o FileStats

Enviado: 27 Out 2008 14:27
por sambomb
Falha minha, a data exibida pelo windows automaticamente é a data de modificação(que não é alterada ao realizar cópias) e não de criação :)Pos

usando o FileStats

Enviado: 23 Abr 2015 17:43
por spartam007
Boa noite Senhores, sou novo por aqui... estou com o mesmo objetivo... porém tentei usar também o filedate(). mas não sei qual lib uso para o filestats ou filedate, se caso tiverem para disponibilizar agradeço.

se puderem me ajudar, fico muito agradecido.

usando o FileStats

Enviado: 23 Abr 2015 19:22
por alxsts
Olá!

Seja bem-vindo ao fórum!

Esta função foi migrada do xHarbour e está na xHb.lib. Inclua em sua linha de comando do hbmk2 ou no seu arquivo .Hbp a chave -lxHb

Veja o exemplo que consta no manual do xHarbour:

Código: Selecionar todos

// The example shows how to retrieve statistical information about
// a single file, and how to convert the time values from Seconds
// to a hh:mm:ss time formatted string.

   PROCEDURE Main
      LOCAL cFileName := "FILESTATS.PRG"
      LOCAL cFileAttr  , nFileSize
      LOCAL dCreateDate, nCreateTime
      LOCAL dChangeDate, nChangeTime

      ? FileStats( cFileName, @cFileAttr  , @nFileSize  , ;
                              @dCreateDate, @nCreateTime, ;
                              @dChangeDate, @nChangeTime  )

      ? "File statistiscs"
      ? "File Name :", cFileName
      ? "Attributes:", cFileAttr
      ? "File Size :", nFileSize
      ? "Created   :", dCreateDate, TString( nCreateTime )
      ? "Changed   :", dChangeDate, TSTring( nChangeTime )
   RETURN
FileStats

usando o FileStats

Enviado: 24 Abr 2015 17:23
por spartam007
Boa Tarde. vou fazer os testes aqui. Muito obrigado pela atenção.

usando o FileStats

Enviado: 23 Ago 2016 17:47
por asimoes
Voltando ao assunto.

Estou notando um problema com a função FileStats com o retorno de dChangeDate e nChangeTime, quando é exibido no drive local retorna certo, quando executado em drive de rede, no meu caso novell, a data e hora são outra., a hora fica atualizado a cada exibição. Alguém já notou isso?

usando o FileStats

Enviado: 23 Ago 2016 19:37
por JoséQuintas
Nunca usei isso, e nem faço idéia pra qual situação usaria isso.

O Windows é doido.
Codepage trás problemas doidos.
O fuso horário também trás problemas doidos.

Lembro que tinha dois HDs, um formatado como NFTS e outro como FAT32.
O horário entre eles era diferente.
No caso de backup, quando entrava/saía de horário de verão, era considerado que TODO HD era mais antigo.
E isso usando tudo local.
Se local já deu diferença, em rede então....

Essas coisas só complicam.
Talvez sirva pra quem inventou isso, ou em situações controláveis.

usando o FileStats

Enviado: 24 Ago 2016 09:56
por asimoes
Quintas,

Eu notei o problema no log de erro do sistema, a data e hora de modificação do executável em um drive de rede não correspondiam a data e hora real do executável, fiz o teste no drive local c: e tudo certo, então fiz o teste com a função Directory que no drive de rede retornou data e hora certa. Pode ser um bug da função Filestats quando pega informação do executável em um drive de rede, no meu caso novell

usando o FileStats

Enviado: 24 Ago 2016 11:25
por JoséQuintas
Também pode ser bug do Windows.
Coloca um fuso horário qualquer, pra dispositivos que não tem fuso horário.

Ou pior... o dispositivo tem seu próprio fuso horário, manda pro Windows, e o Windows faz seu ajuste de fuso horário.
E vice-versa.

Windows NTFS x Windows FAT32
Windows x Novell
Windows x Linux
Etc.

usando o FileStats

Enviado: 24 Ago 2016 11:29
por JoséQuintas
Aproveitando....

Código: Selecionar todos

#define JPA_VERSAO "2016.08.24.1000"
.
Email enviado automaticamente pelo sistema (JPA v.2016.08.20.1800)
Desse jeito não precisa data/hora do EXE, a própria versão já define.
Lógico... o CH alterei hoje, por isso não bate o número de versão.... rs

usando o FileStats

Enviado: 24 Ago 2016 12:13
por Vlademiro
Se o problema for só obter um identificador para a versão do programa, o Harbour já faz isso automaticamente.

Pode compilar com a versão

-tshead=build.ch

Com essa versão ele gera o arquivo build.ch

O arquivo build.ch :

Código: Selecionar todos

/* Automatically generated by hbmk2. Do not edit. */
#define _HBMK_BUILD_DATE_      "20160818"
#define _HBMK_BUILD_TIME_      "185538"
#define _HBMK_BUILD_TIMESTAMP_ "20160818185538201"
Daí vc pode fazer no seu código :

Código: Selecionar todos

#include "build.ch"

usando o FileStats

Enviado: 24 Ago 2016 13:22
por asimoes
Vlademiro,

Não entendi como funciona -tshead=build.ch ?

Tentei aqui e o hbmk2 diz ignorar este comando.

O problema que eu estou tendo é pegar a data/hora do executável rodando em um drive de rede usando a função filestats, que informa uma coisa e no drive local informa outra coisa.