С++ Как проверить последнее измененное время файла

Я кеширую некоторую информацию из файла, и я хочу периодически проверять, если содержимое файла было изменено, чтобы я мог снова прочитать файл, чтобы получить новый контент, если это необходимо.

Вот почему мне интересно, есть ли способ получить последнее измененное время файла в 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

Обратите внимание, что существуют некоторые ограничения:

... Разрешение [время] в некоторых файловых системах составляет всего один час... Во время выполнения программы системные часы могут быть установлены на новое значение другим, возможно автоматическим, процессом...