usando o FileStats

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

Moderador: Moderadores

Jarbas
Usuário Nível 2
Usuário Nível 2
Mensagens: 82
Registrado em: 08 Dez 2005 17:48
Localização: Sao Paulo

usando o FileStats

Mensagem 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
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Re: usando o FileStats

Mensagem 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.
sambomb
Usuário Nível 3
Usuário Nível 3
Mensagens: 250
Registrado em: 24 Out 2008 17:02
Localização: Itaocara - RJ - Brasil

Re: usando o FileStats

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

Rca Sistemas - Itaocara - RJ
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Re: usando o FileStats

Mensagem 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...).
sambomb
Usuário Nível 3
Usuário Nível 3
Mensagens: 250
Registrado em: 24 Out 2008 17:02
Localização: Itaocara - RJ - Brasil

Re: usando o FileStats

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

Rca Sistemas - Itaocara - RJ
spartam007
Usuário Nível 1
Usuário Nível 1
Mensagens: 2
Registrado em: 29 Ago 2012 10:20
Localização: Sao Paulo/SP

usando o FileStats

Mensagem 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.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

usando o FileStats

Mensagem 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
[]´s
Alexandre Santos (AlxSts)
spartam007
Usuário Nível 1
Usuário Nível 1
Mensagens: 2
Registrado em: 29 Ago 2012 10:20
Localização: Sao Paulo/SP

usando o FileStats

Mensagem por spartam007 »

Boa Tarde. vou fazer os testes aqui. Muito obrigado pela atenção.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

usando o FileStats

Mensagem 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?
►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

usando o FileStats

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

usando o FileStats

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

usando o FileStats

Mensagem 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.
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/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

usando o FileStats

Mensagem 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
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/
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

usando o FileStats

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

usando o FileStats

Mensagem 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.
►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)
Responder