Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

date de modif de fichier .pb.

4 réponses
Avatar
noreply
bonjour ,
il s'agit d'un pb de programmation en C mais je debute avec dev-c++
c'est pourquoi je poste ici

j'avais fait un prog C (en turboc 1.5 )qui modifiait les dates de mes
fichiers .jpg pour pouvoir les trier et classer a ma guise .
depuis que je suis passe a dev-C++ je ne peux plus le compiler ftime
n'est plus connu apparemment.
voici l'ancien code:

#include <io.h>
....
struct ftime resu;
.....
printf("%s","Donnez nouvelle date-heure : JJ/MM/AAAA/HH/MN ");
gets(rep);
extrait(rep,0,2,champ); resu.ft_day=atoi(champ);
extrait(rep,3,2,champ); resu.ft_month=atoi(champ);
extrait(rep,6,4,champ); resu.ft_year=(atoi(champ)-1980);
retour=setftime(descri,&resu);...
close(descri);

quel include sous dev-C++4 ? quelle struct et quel fonction
equivalente a setftime ?
j'ai trouve ceci en epluchant les .h !! : utime.h

* Structure used by _utime function.

struct _utimbuf
{
time_t actime; /* Access time */
time_t modtime; /* Modification time */
};



#ifdef __cplusplus
extern "C" {
#endif

int _utime (const char* szFileName, struct _utimbuf* pTimes);
int _futime (int nHandle, struct _utimbuf* pTimes);

je vois bien comment lire la date de modif mais comment la mettre a
jour dans le fichier,
c'est futime ????
et pTimes c'est quoi ??

merci de votre aide .

4 réponses

Avatar
kanze
wrote:

il s'agit d'un pb de programmation en C mais je debute avec
dev-c++ c'est pourquoi je poste ici


Dev-C++ est basé sur g++, je crois. Il y a donc aussi un
compilateur C. Si tu veux travailler en C, le mieux, c'est de
l'utiliser (gcc, fichiers dont le nom termine en .c, etc.). Et
dans ce cas-là, il y a aussi un groupe de news sur le C, qui
conviendrait plus.

j'avais fait un prog C (en turboc 1.5 )qui modifiait les dates
de mes fichiers .jpg pour pouvoir les trier et classer a ma
guise . depuis que je suis passe a dev-C++ je ne peux plus le
compiler ftime n'est plus connu apparemment.


C'est peut-être parce qu'il n'y a pas de ftime en C. D'après les
apparences, tu t'es servi d'une extension ou d'une particularité
de Turbo C, qui ne fait pas partie du langage, et qui risque de
ne pas être présente ailleurs.

Alors, il te reste deux alternatifs : rester avec Turbo C, ou
réécrire le code pour ne pas se servir de l'extension. Une
façon de réécrire le code serait de fournir ton propre ftime. On
pourrait t'y aider en fr.comp.lang.c, si on savait ce qu'il
faisait. Ou ici, si on savait ce qu'il faisait ET si tu veux
travailler en C++.

voici l'ancien code:

#include <io.h>


En-tête non standard.

....
struct ftime resu;
.....
printf("%s","Donnez nouvelle date-heure : JJ/MM/AAAA/HH/MN ");
gets(rep);
extrait(rep,0,2,champ); resu.ft_day=atoi(champ);
extrait(rep,3,2,champ); resu.ft_month=atoi(champ);
extrait(rep,6,4,champ); resu.ft_year=(atoi(champ)-1980);
retour=setftime(descri,&resu);...
close(descri);

quel include sous dev-C++4 ? quelle struct et quel fonction
equivalente a setftime ?


Difficile à dire sans savoir ce qu'il faisait. S'il s'agit de
changer les dates de modification des fichiers, il n'y a pas de
solution proprement C ou C++ -- il faut se rabattre sur l'API
système (et donc poser la question dans un groupe dédié du
système -- sous Unix, cherche du côté utimes, mais je n'ai pas
le moindre idée pour Windows).

j'ai trouve ceci en epluchant les .h !! : utime.h

* Structure used by _utime function.

struct _utimbuf
{
time_t actime; /* Access time */
time_t modtime; /* Modification time */
};

#ifdef __cplusplus
extern "C" {
#endif

int _utime (const char* szFileName, struct _utimbuf* pTimes);
int _futime (int nHandle, struct _utimbuf* pTimes);

je vois bien comment lire la date de modif mais comment la
mettre a jour dans le fichier,
c'est futime ????
et pTimes c'est quoi ??


Qui sait ? Rien de celà n'est standard. Ça donne un peu
l'impression qu'ils ont essayé de bricoler quelque chose qui
ressemble à Unix, sans l'être : sous Unix, tu lis toutes les
informations qui concerne un fichier, y compris les timestamps,
au moyen de stat (à partir du nom du fichier) ou fstat (à partir
d'un descripteur de fichier ouvert) ; il y a une fonction utimes
pour positionner les timestamps de modification et d'accès.
(Pour des raisons de sécurité, il n'y a rien pour modifier de
façon arbitraire le timestamp de mise à jour du descripteur du
fichier.)

À coup d'oeil : _utime, ci-dessus, ressemble un peu à utime de
Unix. Du coup, je me pose la question s'il n'y aurait pas un
_stat qui ressemble à stat. Quant à la reste : j'imagine (mais
à ta place, je le vérifierais dans la doc) que _utime sert à la
mise à jour des timestamps d'un fichier à partir de son nom, et
_futime à partir du descripteur de fichier ouvert (ce qui
s'appelle un handle sous Windows). Quant à pTimes, c'est clair
que c'est un pointeur à un _utimbuf ; une struct qui contient
deux timestamp, un pour le dernier accès, et l'autre pour la
dernière modification. Je ne sais pas ce qu'on pourrait dire de
plus précis là-dessus.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Avatar
noreply
Le 9 Feb 2006 00:55:30 -0800, "kanze" écrit:

wrote:

il s'agit d'un pb de programmation en C mais je debute avec
dev-c++ c'est pourquoi je poste ici




........ : j'imagine (mais >a ta place, je le verifierais dans la
doc) que _utime sert a la >mise a jour des timestamps d'un fichier
...
--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

regarder la doc ?

le probleme , c'est que DEV-C++ est un compilateur en libre
telechargemnt que j'ai recupere ,mais que je n'ai aucune doc
particuliere a part les bouquins generalistes sur C ,que je maitrise
bien.c'est plutot les fonctions propres a un systeme ( windows :( )
qui m'embetent...
quand au forum de DEV-C++ ,il est tout en anglais , ca n'aide pas trop

c'est ca le probleme principal de pas mal de gens comme moi qui
programmons par loisir c'est qu'on hesite a acheter des packages
complets puisqu'il il y a pas mal de choses en libre .
toute la difficulte apres c'est de trouver quel fonction noon standard
utiliser , et quel include qui va avec et les parametres decrits dans
les .h que j'epuche sont quand meme assez sybillins !!!!

je te remercie de ta reponse ,elle m'aide dans la mesure ou je vais
fouiller du cote de stat.h
merci .

.
...


Avatar
kanze
wrote:
Le 9 Feb 2006 00:55:30 -0800, "kanze" écrit:

wrote:

il s'agit d'un pb de programmation en C mais je debute avec
dev-c++ c'est pourquoi je poste ici



........ : j'imagine (mais >a ta place, je le verifierais dans la
doc) que _utime sert a la >mise a jour des timestamps d'un fichier
...

regarder la doc ?

le probleme , c'est que DEV-C++ est un compilateur en libre
telechargemnt que j'ai recupere ,mais que je n'ai aucune doc
particuliere


Ça m'étonne que tu ne peux pas trouver de la doc au même endroit
où tu a trouvé le compilateur. Ou au moins des références vers
la doc qui convient.

D'après ce qu'il me semble avoir entendu dire, Dev-C++ est en
fait un rassemblage d'un certain nombre d'autres outils, du
genre gcc. Il faudrait donc éventuellement chercher les docs à
la source -- la doc du compilateur chez gcc, la doc de la
bibliothèque à la source de la bibliothèque, etc.

De toute façon, une visite de ta part à
http://www.bloodshed.net/dev/doc/index.html s'impose. (Rémarque,
je viens de l'essayer, et le lien vers glibc ne semble pas
fonctionner. Si les fonctions en question en proviennent, essaie
http://www.gnu.org/software/libc/manual/. Mais les fonctions qui
t'intéressent ne sont pas de Glibc, mais de l'API Windows. Bien
que je me serais attendu plutôt à un nom comme SetFileTimestamp
pour une fonction de l'API Windows. Et il y a en fait des
fonctions GetFileInformationByHandleEx and
SetFileInformationByHandle.)

a part les bouquins generalistes sur C ,que je maitrise
bien.c'est plutot les fonctions propres a un systeme ( windows
:( ) qui m'embetent...


Si on veut programmer sous Windows, il faut bien les apprendre.
Il y a des bouquins pour ça.

quand au forum de DEV-C++ ,il est tout en anglais , ca n'aide
pas trop


Un jour ou l'autre, il va falloir que tu t'y mettes.

Réalistiquement, même quand les traductions existent, elles ne
sont jamais aussi actuelles ni en général aussi précises que
l'original.

c'est ca le probleme principal de pas mal de gens comme moi
qui programmons par loisir c'est qu'on hesite a acheter des
packages complets puisqu'il il y a pas mal de choses en libre.


Surtout, il faut l'avouer, les prix sont souvent exhorbitants.
Au moins pour des particuliers.

toute la difficulte apres c'est de trouver quel fonction noon
standard utiliser , et quel include qui va avec et les
parametres decrits dans les .h que j'epuche sont quand meme
assez sybillins !!!!


Les .h ne sont pas la documentation.

Typiquement, les .h ont un copyright. Qui précise leur origine.
Et si tu sais d'où vient la bibliothèque, tu dois pouvoir
trouver rapidement la site avec de la documentation. (Qui risque
d'être en anglais, évidemment.)

En l'occurance, les documentations qui t'intéressent sont à
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/ht ml/vcrefruntimelibraryreference.asp
et
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnanchor /html/anch_win32com.asp.
Et les forums de discussion, fr.comp.os.ms-windows.*.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34



Avatar
noreply
Le 10 Feb 2006 01:12:37 -0800, "kanze" écrit:
finalement a force de decoder les .h de Dev-C++ j'ai reussi !

je remets le nouveau code si ca interesse quelqun :

#include <time.h> /* structure tm ....*/
#include <sys/utime.h> /* mise a jour fichier */
...

time_t sec_new; /* en fait un long (nb de secondes depuis 1970 */
struct tm tm_new; /* structure pour future date */
struct utimbuf mymod; /* structure pour date acces ou modification*/
...
printf("%s","Donnez nouvelle date-heure : JJ/MM/AAAA/HH/MN ");
gets(rep);
extrait(rep,0,2,champ);tm_new.tm_mday=atoi(champ);
extrait(rep,3,2,champ);tm_new.tm_mon=atoi(champ)-1; /* mois de 0 a 11
..!*/
extrait(rep,6,4,champ);tm_new.tm_year=atoi(champ)-1900; /* >= 1980 */
extrait(rep,11,2,champ);tm_new.tm_hour=atoi(champ);
extrait(rep,14,2,champ);tm_new.tm_min=atoi(champ);
tm_new.tm_sec; /* pourquoi pas ? */
tm_new.tm_isdst=0; /* sinon on peut avoir 1h de moins que ce qu'on
demande (hiver )*/
sec_new = mktime(&tm_new); /*on transforme la structure tm en long
pour utime */
mymod.modtime=sec_new; /*le long est mis dans le membre 'modif'
(actime pour acces )*/
nb=utime(fichier,&mymod); /* mise a jour */
if(nb != 0) {puts("PB MAJ !");sleep(2);exit(-1);}

ouf ! merci pour tes conseils concernant les docs .