stat sous windows?
stat sous windows?
A peine je part que déjà je reviens (monde de merde!), on m'a demandé d'updater un TRES VIEUX code en PB.
Il servait à surveiller le déroulement d'un programme en observant son fichier log. Le programme ouvrait, écrivait, et fermait son fichier log; mais dans une nouvelle version, ce comportement a changé : il ne ferme son log que quand l'execution est finie.
Pour contourner le probleme, j'ai lu un peu de doc, et je suis tombé là dessus : https://msdn.microsoft.com/en-us/library/14h5k7ff.aspx Ca fait le job parfaitement, mais... Je n'ai aucune idée de comment l'utiliser avec PB. Ni les fonctions, ni les structures ne sont déclarées.
Comme j'ai pas vraiment envie de porter tout le programme en C++, je serais éternellement reconnaissant à celui ou celle qui pourrait m'expliquer...
Il servait à surveiller le déroulement d'un programme en observant son fichier log. Le programme ouvrait, écrivait, et fermait son fichier log; mais dans une nouvelle version, ce comportement a changé : il ne ferme son log que quand l'execution est finie.
Pour contourner le probleme, j'ai lu un peu de doc, et je suis tombé là dessus : https://msdn.microsoft.com/en-us/library/14h5k7ff.aspx Ca fait le job parfaitement, mais... Je n'ai aucune idée de comment l'utiliser avec PB. Ni les fonctions, ni les structures ne sont déclarées.
Comme j'ai pas vraiment envie de porter tout le programme en C++, je serais éternellement reconnaissant à celui ou celle qui pourrait m'expliquer...
Re: stat sous windows?
Salut Poshu, Ne peux tu pas filer ce très vieux code ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: stat sous windows?
Tu ne pourrais pas bidouiller avec FileSize() ? Si le log change, sa taille va forcément varier, non ?
Sinon, y'a peut-être moyen d'utiliser les fonctions plus simples GetFileAttributes() ou GetFileAttributesEx() ou GetFileTime()...
Sinon, y'a peut-être moyen d'utiliser les fonctions plus simples GetFileAttributes() ou GetFileAttributesEx() ou GetFileTime()...
Re: stat sous windows?
Le très vieux code, c'est le mien, il ne marche plus, puisque le programme que je surveille ne ferme plus son fichier log entre deux écritures.
Filesize, ça ne marche pas; par acquis de conscience, j'ai aussi essayé GetFileSize et GetFileSizeex à la main, mais ça ne marche pas non plus... Et toutes les autres fonctions citées souffrent du même problème : j'ai besoin de descendre plus bas, et ça, c'est via _stat().
_stat fonctionne très bien donc, la question étant : comment l'importer dans pure?
Filesize, ça ne marche pas; par acquis de conscience, j'ai aussi essayé GetFileSize et GetFileSizeex à la main, mais ça ne marche pas non plus... Et toutes les autres fonctions citées souffrent du même problème : j'ai besoin de descendre plus bas, et ça, c'est via _stat().
_stat fonctionne très bien donc, la question étant : comment l'importer dans pure?
Re: stat sous windows?
J'ai crû comprendre que sous Windows, l'implémentation de stat() utilisait d'autres fonctions, donc que ce n'était pas si "bas niveau" que ça... Mais bon, apparemment, en regardant vite fait, y'a _stat là :
Code : Tout sélectionner
OpenLibrary(0, "msvcrt.dll")
_stat = GetFunction(0, "_stat")
CloseLibrary(0)
Re: stat sous windows?
J'ai essayé avec un bout de code pris sur le forum anglais (version MacOS), mais ça ne fonctionne que pour la date pour l'instant.
Code : Tout sélectionner
Structure timespec
tv_sec.i
tv_nsec.i
EndStructure
Structure stat64
st_dev.l; /* ID of device containing file */
st_mode.w; /* Mode of file */
st_nlink.w; /* Number of hard links */
st_ino.q; /* File serial number */
st_uid.l; /* User ID of the file */
st_gid.l; /* Group ID of the file */
st_rdev.i; /* Device ID */
st_atimespec.timespec; /* time of last access */
st_mtimespec.timespec; /* time of last data modification */
st_ctimespec.timespec; /* time of last status change */
st_birthtimespec.timespec; /* time of file creation(birth) */
st_size.q; /* file size, in bytes */
st_blocks.q; /* blocks allocated for file */
st_blksize.l; /* optimal blocksize for I/O */
st_flags.l; /* user defined flags for file */
st_gen.l; /* file generation number */
st_lspare.l; /* RESERVED: DO NOT USE! */
st_qspare.q[2]; /* RESERVED: DO NOT USE! */
EndStructure
ImportC "msvcrt.lib"
_stat64(path.p-ascii, *buf)
EndImport
_stat64(OpenFileRequester("Choisissez un fichier à charger", "", "", 0), @stats.stat64)
Debug "File size : " + stats\st_size
Debug "Last access : " + FormatDate("%yyyy/%mm/%dd", stats\st_atimespec\tv_sec)
CallDebugger
Re: stat sous windows?
En cherchant j'ai trouvé ce code pour Linux, y'a sûrement des trucs à utiliser : http://forums.purebasic.com/german/view ... 21&t=28816
Re: stat sous windows?
Okay, on peut importer des fonctions de l'api aussi facilement que ça? (c'est la seule fois où j'en ai eu besoin, d'habitude, c'est dispo de base, ahah)
Merci beaucoup! (je posterai mes résultats une fois que j'aurai fait un peu mumuse avec, si ça peut servir après)
Question qui tue : comment t'as trouvé que c'était dans msvcrt.lib? J'en vois pas de trace sur la msdn, et je vais avoir besoin d'autres fonctions...
Merci beaucoup! (je posterai mes résultats une fois que j'aurai fait un peu mumuse avec, si ça peut servir après)
Question qui tue : comment t'as trouvé que c'était dans msvcrt.lib? J'en vois pas de trace sur la msdn, et je vais avoir besoin d'autres fonctions...
Re: stat sous windows?
Oui, c'est assez simple, il y a plusieurs trucs, soit les callfunction(), soit les prototypes, soit les import. Voici la structure correcte je pense (pas sûr à 100%), tirée du SDK de Windows.
Code : Tout sélectionner
Structure stat
st_dev.l; /* ID of device containing file */
st_ino.l; /* File serial number */
st_mode.w; /* Mode of file */
st_nlink.w; /* Number of hard links */
st_uid.w; /* User ID of the file */
st_gid.w; /* Group ID of the file */
st_rdev.l; /* Device ID */
st_size.l; /* file size, in bytes */
st_atimespec.i; /* time of last access */
st_mtimespec.i; /* time of last data modification */
st_ctimespec.i; /* time of last status change */
EndStructure
ImportC "msvcrt.lib"
_stat(path.p-ascii, *buf)
EndImport
Name.s = OpenFileRequester("Choisissez un fichier à charger", "", "", 0)
_stat(Name, @stats.stat)
Debug FileSize(Name)
Debug "File size : " + stats\st_size
Debug "Last access : " + FormatDate("%yyyy/%mm/%dd", stats\st_atimespec)
CallDebugger
Re: stat sous windows?
Windows me gave, mais d'une force... On est tellement mieux dans un environnement unix =_=;
Bon, en tous cas, ça marche (woohooh!) merci beaucoup pour l'aide ^^;
Bon, en tous cas, ça marche (woohooh!) merci beaucoup pour l'aide ^^;
Re: stat sous windows?
De rien