web-dev-qa-db-ja.com

C ++ファイルの最終変更時刻を確認する方法

ファイルからいくつかの情報をキャッシュしています。ファイルのコンテンツが変更されているかどうかを定期的に確認して、必要に応じてファイルを再度読み取って新しいコンテンツを取得できるようにします。

だからこそ、C++でファイルの最終変更時刻を取得する方法があるのだろうかと考えています。

11
Mr. Nicky

これを行うための言語固有の方法はありませんが、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;
    ...
}
20
Smeeheey

ブーストの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

2
Dylan95

いくつかの制限 があることに注意してください:

... [時間]解像度は、一部のファイルシステムでは1時間程度です。プログラムの実行中に、システムクロックが他の(場合によっては自動の)プロセスによって新しい値に設定されることがあります...

0
pooya13