web-dev-qa-db-fra.com

C ++ Comment vérifier la dernière heure de modification d'un fichier

Je mets en cache certaines informations d'un fichier et je veux pouvoir vérifier périodiquement si le contenu du fichier a été modifié afin de pouvoir relire le fichier pour obtenir le nouveau contenu si nécessaire.

C'est pourquoi je me demande s'il existe un moyen d'obtenir la dernière heure de modification d'un fichier en C++.

11
Mr. Nicky

Il n'y a aucun moyen spécifique à la langue de le faire, mais le système d'exploitation fournit les fonctionnalités requises. Dans un système Unix, la fonction stat est ce dont vous avez besoin. Il existe un équivalent _stat fonction fournie pour les fenêtres sous Visual Studio.

Voici donc un code qui fonctionnerait pour les deux:

#include <sys/types.h>
#include <sys/stat.h>
#ifndef WIN32
#include <unistd.h>
#endif

#ifdef WIN32
#define stat _stat
#endif

auto filename = "/path/to/file";
struct stat result;
if(stat(filename.c_str(), &result)==0)
{
    auto mod_time = result.st_mtime;
    ...
}
20
Smeeheey

Vous pouvez utiliser le boost de last_write_time pour ça. Boost est multiplateforme.

Ici est le lien du tutoriel pour cela.

Boost a l'avantage de fonctionner pour toutes sortes de noms de fichiers, il prend donc en charge les noms de fichiers non ASCII.

6

depuis la publication de cet article, c ++ 17 a été publié et inclut une bibliothèque de système de fichiers basée sur la bibliothèque de système de fichiers boost:

https://en.cppreference.com/w/cpp/experimental/fs

qui comprend un moyen d'obtenir la dernière heure de modification:

https://en.cppreference.com/w/cpp/filesystem/last_write_time

2
Dylan95

Veuillez noter qu'il y a certaines limitations :

... La résolution [temps] est aussi faible qu'une heure sur certains systèmes de fichiers ... Pendant l'exécution du programme, l'horloge système peut être réglée sur une nouvelle valeur par un autre processus, éventuellement automatique, ...

0
pooya13