С++ Как проверить последнее измененное время файла
Я кеширую некоторую информацию из файла, и я хочу периодически проверять, если содержимое файла было изменено, чтобы я мог снова прочитать файл, чтобы получить новый контент, если это необходимо.
Вот почему мне интересно, есть ли способ получить последнее измененное время файла в C++.
Ответы
Ответ 1
Для этого не существует конкретного языка, однако ОС предоставляет требуемые функции. В системе unix функция stat
- это то, что вам нужно. Существует эквивалентная функция _stat
для окон под Visual Studio.
Итак, вот код, который будет работать для обоих:
#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;
...
}
Ответ 2
Для этого вы можете использовать boost last_write_time
. Boost кроссплатформенный.
Здесь ссылка на учебник для этого.
Преимущество Boost заключается в том, что он работает со всеми видами имен файлов, поэтому он заботится о не-ASCII именах файлов.
Ответ 3
Обратите внимание, что существуют некоторые ограничения:
... Разрешение [время] в некоторых файловых системах составляет всего один час... Во время выполнения программы системные часы могут быть установлены на новое значение другим, возможно автоматическим, процессом...
Ответ 4
Со времени публикации этой статьи, С++ 17 был выпущен и включает библиотеку файловой системы на основе библиотеки файловой системы boost:
https://en.cppreference.com/w/cpp/experimental/fs
который включает способ получить время последней модификации:
https://en.cppreference.com/w/cpp/filesystem/last_write_time