JeuxOnLineForumsPlusConnectés : 528 (sites) | 1162 (forums)Créer un compte
Forums divers
La Taverne
Les forums JOL > Forums divers > La Taverne > [Prog] Jouer avec les dates de modification de fichier en langage C RSS
   
Répondre
Partager Outils Rechercher
Avatar de Oracle
Oracle
Alpha & Oméga
 
Avatar de Oracle
 
Question

[Prog] Jouer avec les dates de modification de fichier en langage C

J'ai un problème avec des lecture et modif de dates de fichier, en langage C (winapi32?)... Pour résumer j'aurai besoin de savoir comment lire la date de modif d'un fichier, et une fois fait je voudrai réenregistrer les infos de date a l'identique. J'ai a ma disposition le path+nom du fichier (que je reçoit en paramètre sous forme de char * et un FILE * (retour de fopen) que je déclare et instancie en local

Je patauge compl?ment avec les * les & les FILE les HANDLE les FILETIME les LPFILETIME GetFileTime et SetFileTime, quelqu'un saurait m'aider?
(Ou au pire me réorienter vers des forums spécialisés en programmation C )
Lien direct vers le message - Vieux
Avatar de Mothra
Mothra
 
Avatar de Mothra
 
man 2 fstat

Pour reenregistrer en modifiant la date de derniere modification je ne sais pas trop si tu peux sans changer l'heure a une date posterieure de maniere provisoire (ce qui enervera rapidement tes utilisateurs en introduisant une derive anormale dans l'horloge).
Lien direct vers le message - Vieux
Avatar de Oracle
Oracle
Alpha & Oméga
 
Avatar de Oracle
 
En fait j'ajoute dans un fichier binaire des informations Creator et Type du fs MacOS à partir d'un PC pour le rendre explicitement lisible sur Mac, mais je voudrais faire ça sans modifier la date de modification du fichier, car ça me pause problème ailleurs.
Lien direct vers le message - Vieux
BälÐ
Roi
 
C'est pas trop compliqué en fait, mais faut pas passer par fopen puisqu'il faut un handle de fichier ouvert en GENERIC_READ ou WRITE.

Citation:

#include <assert.h>

HANDLE hFile;
FILETIME creat;
FILETIME lastaccess;
FILETIME lastwrite;
int result;


hFile = CreateFile([path du fichier], GENERIC_READ, FILE_SHARE_DELETE,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

assert(hFile != INVALID_HANDLE_VALUE);

//recupere les anciennes date
result = GetFileTime (hFile, &creat, &lastaccess, &lastwrite);

assert(result);

CloseHandle(hFile);


blabla ...
Modif du fichier
blablaa....


hFile = CreateFile([path du fichier], GENERIC_WRITE, FILE_SHARE_DELETE,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

assert(hFile != INVALID_HANDLE_VALUE);


result = SetFileTime (hFile, &creat, &lastaccess, &lastwrite);

assert(result);

CloseHandle(hFile);
Et le tour est joué
Lien direct vers le message - Vieux
Avatar de Oracle
Oracle
Alpha & Oméga
 
Avatar de Oracle
 
Raaaah merci beaucoup, tu viens de me faire gagner un temps précieux ! Je me plantait sur le CreateFile.

Maintenant une grande question... si je remplace fopen par CreateFile, ma lib sera toujours compatible PC, Mac et Unix en même temps ?

Booon bon ok ok je ressort mes #ifdef
Lien direct vers le message - Vieux
Avatar de Hanny Drocéphale
Hanny Drocéphale [FED]
 
Avatar de Hanny Drocéphale
 
haaa les pointeurs, les adresses, les pointeurs sur pointeurs sur pointeurs sur truc

*edit pour racontage de conneries plus grosses que moi *
Lien direct vers le message - Vieux
Avatar de Lango
Lango
 
Avatar de Lango
 
Citation:
Provient du message de Oracle
Raaaah merci beaucoup, tu viens de me faire gagner un temps précieux ! Je me plantait sur le CreateFile.

Maintenant une grande question... si je remplace fopen par CreateFile, ma lib sera toujours compatible PC, Mac et Unix en même temps ?
merci de ne pas confondre Windows et PC, c'est différent

sinon m'étonnerait qu'un truc pareil marche sous UNIX, en tous cas jamais vu de CreateFile. (d'ailleurs c'est bizarre un nom de fonction avec majuscules, en général en C la convention est de mettre les noms en minuscules...)
d'ailleurs c'est dans quelle bibliothèque ce CreateFile ? je vois pas de #include associé...
Lien direct vers le message - Vieux
Avatar de Oracle
Oracle
Alpha & Oméga
 
Avatar de Oracle
 
Citation:
Provient du message de Lango Silma
merci de ne pas confondre Windows et PC, c'est différent
Merci de me le rappeler (note que tu peux mettre du Linux sur un Mac également )

Plateforme SDK ? Je ne vais pas me compliquer la vie, ça sent le #ifdef WIN32 ça
Lien direct vers le message - Vieux
Avatar de Lango
Lango
 
Avatar de Lango
 
Citation:
Provient du message de Oracle
(note que tu peux mettre du Linux sur un Mac également )
certes, mais l'amalgame Mac = MacOS me gène moins, on peut considérer que c'est juste une abbréviation

par contre abbréger Windows en PC... à moins d'avoir vraiment beaucoup bu et ingéré en grande quantité des substances illicites...
Lien direct vers le message - Vieux
Avatar de Oracle
Oracle
Alpha & Oméga
 
Avatar de Oracle
 
C'est parce que je n'ai plus l'habitude de travailler avec des vieux clous, avec le java et le C# on ne se pose pas de questions
Lien direct vers le message - Vieux
Avatar de Mothra
Mothra
 
Avatar de Mothra
 
tient pour ton #ifdef POSIX


Code:
#include <sys/types.h>
#include <utime.h>
#include <sys/stat.h>
#include <errno.h>

#define qerror(s) (perror(s), exit(-errno))

// blablabla 

int main(void)
{
  char *srcfilename = "/home/toto/totoorig.fic";
  char *dstfilename = "/home/toto/totomodif.fic";
  struct stat stats;
  struct utimbuf times;

//... 
  if(stat(srcfilename, & stats) < 0) qerror("stat");

  times.actime = stats.st_atime; /* date de dernier acces (que tu recuperes avec fstat sur ton fichier original donc */
  times.modtime = stats.st_mtime /* date de derniere modification (idem)
  if(utime(dstfilename, & times) < 0) qerror("utime"); 

//...
Lien direct vers le message - Vieux
Avatar de Oracle
Oracle
Alpha & Oméga
 
Avatar de Oracle
 
Merci mite ! Et je viens de trouver pour mac, parfait
Lien direct vers le message - Vieux
Avatar de Lango
Lango
 
Avatar de Lango
 
Citation:
Provient du message de Oracle
Merci mite ! Et je viens de trouver pour mac, parfait
ben si par Mac tu entends MacOS X, le code qu'a posté Mothra doit marcher, non (Mac OS X est POSIX non ?)
Lien direct vers le message - Vieux
Avatar de Oracle
Oracle
Alpha & Oméga
 
Avatar de Oracle
 
Possible, MacOS X est censé etre basé sur Unix si j'ai bien compris, mais ce qui m'intéressait c'etait MacOS Classic

THINK Reference est plus bavard que la MSDN de Microsoft
Lien direct vers le message - Vieux
BälÐ
Roi
 
Si c'est pour utiliser le code sur plusieurs plateforme, utilise la routine de mothra et pas le createfile. toutes les plateforme sont posix meme windows , faut seulement rajouter un underscore devant le nom des fonction C pour windows genre _stats ou _utime
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forums divers > La Taverne > [Prog] Jouer avec les dates de modification de fichier en langage C
   

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés

Outils Rechercher
Rechercher:

Recherche avancée

Thème visuel : Fuseau horaire GMT +1. Il est actuellement 11h12.
   

© JeuxOnLine, le site des MMO, MMORPG et MOBA. Tous droits réservés. - Conditions générales d'utilisation - Conditions d'utilisation des forums - Traitement des données personnelles - ! Signaler un contenu illicite