[C++] Modifier une propriété d'un fichier.

Résolu
Signaler
Messages postés
31
Date d'inscription
dimanche 20 mars 2005
Statut
Membre
Dernière intervention
16 avril 2008
-
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
-
Bonjour à tous !
Je programme C++  (en ce moment avec la QUI QT)  et je cherche à modifier la date de dernière modification associée à un fichier, en espérant qu'il existe une fonction pour ca dans une lib.
Je suis, sinon, pret à contourner le problème: j'ai par exemple pensé à modifier le fichier puis le ré-enregistrer afin que la date de modification soit celle du système, mais ce n'est pas le meilleur moyen je suppose ! :D

J'espere que vous pourrez m'aider,
Merci d'avance,

SabbatoR

6 réponses

Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
1
Bonjour,

SetFileTime() qui permet de modifier les 3 horodates d'un fichier (GetFileTime() pour les lire).

Jean-François
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
1
Bonjour,

GetFileTime() et SetFileTime() aussi !
Avec un handle sur un dossier (CreateFile() avec le flag FILE_FLAG_BACKUP_SEMANTICS).

Exemple :

#include <stdio.h>
#include <windows.h>
void main()
{
   // --- Handle sur le dossier
   HANDLE hFile = CreateFile
   (
       "C:\\Windows"
      ,GENERIC_READ | GENERIC_WRITE
      ,FILE_SHARE_READ | FILE_SHARE_DELETE
      ,0
      ,OPEN_EXISTING
      ,FILE_FLAG_BACKUP_SEMANTICS
      ,NULL
   );

   // --- Lire les horodates du dossier
   FILETIME FileTimeCreate,FileTimeAccess,FileTimeModify;
   GetFileTime(hFile,&FileTimeCreate,&FileTimeAccess,&FileTimeModify);




   // --- Convertir en horodates système (en TU)

   SYSTEMTIME SystemTimeCreate,SystemTimeAccess,SystemTimeModify;
   FileTimeToSystemTime(&FileTimeCreate,&SystemTimeCreate);
   FileTimeToSystemTime(&FileTimeAccess,&SystemTimeAccess);
   FileTimeToSystemTime(&FileTimeModify,&SystemTimeModify);

   // --- Montrer les horodates du dossier
   printf("Creation              : %02d/%02d/%04d - %02d:%02d:%02d\n"
         ,SystemTimeCreate.wDay,SystemTimeCreate.wMonth,SystemTimeCreate.wYear
         ,SystemTimeCreate.wHour,SystemTimeCreate.wMinute,SystemTimeCreate.wSecond);
   printf("Dernier acces         : %02d/%02d/%04d - %02d:%02d:%02d\n"
         ,SystemTimeAccess.wDay,SystemTimeAccess.wMonth,SystemTimeAccess.wYear
         ,SystemTimeAccess.wHour,SystemTimeAccess.wMinute,SystemTimeAccess.wSecond);
   printf("Derniere modification : %02d/%02d/%04d - %02d:%02d:%02d\n"
         ,SystemTimeModify.wDay,SystemTimeModify.wMonth,SystemTimeModify.wYear
         ,SystemTimeModify.wHour,SystemTimeModify.wMinute,SystemTimeModify.wSecond);
}








Jean-François
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
1
Pour SetFileTime() avec un fichier je connaissais pour avoir déjà utilisé GetFileTime().
Pour la même chose avec un dossier j'ai cherché change time folder setfiletime (pour avoir quelque chose d'analogue à SetFileTime() si possible) sous Google et la première réponse (http://vbnet.mvps.org/index.html?code/fileapi/folderdatetime.htm) donnait une solution que j'ai testé car ça peut servir !

Jean-François
Messages postés
31
Date d'inscription
dimanche 20 mars 2005
Statut
Membre
Dernière intervention
16 avril 2008

Merci infiniment :D
Je vais me renseigner sur la manière de l'utiliser :)

A bientôt,
SabbatoR
Messages postés
31
Date d'inscription
dimanche 20 mars 2005
Statut
Membre
Dernière intervention
16 avril 2008

Re bonjour !
Excusez le double post, je cherche à présent la même fonction mais pour les dossiers, est-ce possible ?

Merci d'avance,
A bientôt
SabbatoR
Messages postés
31
Date d'inscription
dimanche 20 mars 2005
Statut
Membre
Dernière intervention
16 avril 2008

Merci infiniment !
Je n'arrive pas à trouver ce genre d'informations lorsque je cherche sur google, comment fais tu pour toujours arriver à me renseigner aussi rapidement ?

Merci encore,
SabbatoR