ファイルからいくつかの情報をキャッシュしています。ファイルのコンテンツが変更されているかどうかを定期的に確認して、必要に応じてファイルを再度読み取って新しいコンテンツを取得できるようにします。
だからこそ、C++でファイルの最終変更時刻を取得する方法があるのだろうかと考えています。
これを行うための言語固有の方法はありませんが、OSは必要な機能を提供します。 UNIXシステムでは、stat
関数が必要です。 Visual Studioのウィンドウ用に提供される同等の_stat
関数があります。
そのため、両方で機能するコードを次に示します。
#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;
...
}
ブーストのlast_write_time
そのため。 Boostはクロスプラットフォームです。
ここ はそのためのチュートリアルリンクです。
Boostにはあらゆる種類のファイル名で機能するという利点があるため、非ASCIIファイル名を処理します。
この投稿以降、c ++ 17がリリースされ、boostファイルシステムライブラリに基づくファイルシステムライブラリが含まれています。
https://en.cppreference.com/w/cpp/experimental/fs
最終変更時刻を取得する方法が含まれます。
https://en.cppreference.com/w/cpp/filesystem/last_write_time
いくつかの制限 があることに注意してください:
... [時間]解像度は、一部のファイルシステムでは1時間程度です。プログラムの実行中に、システムクロックが他の(場合によっては自動の)プロセスによって新しい値に設定されることがあります...