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....
.
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 :
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.