ディレクトリが80個あり、ディレクトリのチェックサムをチェックしたいと思います。ディレクトリチェックサム
ディレクトリの内容が最新バージョンと一致していることを確認したいと思います。
私はリアルタイムシステムで作業していますので、効率的である必要があります。
ファイルチェックサム機能が見つかりました。
質問:すべてのファイルをループせずにディレクトリにチェックサムを実行できますか?
ディレクトリが80個あり、ディレクトリのチェックサムをチェックしたいと思います。ディレクトリチェックサム
ディレクトリの内容が最新バージョンと一致していることを確認したいと思います。
私はリアルタイムシステムで作業していますので、効率的である必要があります。
ファイルチェックサム機能が見つかりました。
質問:すべてのファイルをループせずにディレクトリにチェックサムを実行できますか?
可能な解決策の1つは、ファイルが変更されたときに各ファイルの日時とハッシュを変更して更新する特別な(非表示の)ファイルを維持することです。次に、そのファイルのハッシュをディレクトリのハッシュとして取得します。これにより、すべてのファイルのチェックサムを計算することはできませんが、ファイルが変更されたときの作業量は減ります。 dirのスナップショットを作成する必要がある場合、選択肢はありませんが、すべてのファイルを特定の順序でチェックサムする必要があります。
注:偽造できないという厳しい要件がない限り、暗号ハッシュを避けることを検討することがあります。暗号ハッシュは、むしろ遅く、非効率的であり、それは目的上のものです。
私はあなたのアプリケーションを特定していません。 md5チェックサムは一般に、精度がスピードよりも優先される状況で使用されます(または不正なプレイに対する追加のバリアを提示するため)。
速度がキングであるビルドシステムでは、ファイルの日付を記入することが一般的に使用されます。たとえば、最新のディレクトリを与えられます。filesystem::path foo
、問題のディレクトリは次のとおりです。filesystem::path bar
あなたは、単に評価することができます:
equal(filesystem::directory_iterator(foo), filesystem::directory_iterator(), filesystem::directory_iterator(bar), filesystem::directory_iterator(), [](const auto& lhs, const auto& rhs) { return filesystem::last_write_time(lhs) == filesystem::last_write_time(rhs); })
このワンライナーについての注意事項:
foo
とbar
<
にラムダで==
を変更することができ、MD5チェックサムを超える多大な利点があり、たとえば、ビルドシステムでVisual Studio's implementation of last_write_time
seems to have an issue with directories
"私の質問はすべてのファイルをループせずにディレクトリにchacksumできますか?"それはあなたが "ディレクトリのチェックサム"の意味に依存します – Slava
実行時にディレクトリを読み込み、その内容が有効であることを確認します。 – LIOR
各ファイルの内容を検証する必要がありますか?はいの場合、各ファイルのチェックサムを計算する必要があります。 – Slava