2016-12-06 13 views
1

現在、関数を使用して取得したHANDLEでファイル情報を取得する機能は、基本的にはGetFileTime機能を使用するレガシーアプリケーションコードのバグを修正しようとしています。C++でロックされたファイルから作成、最終アクセス、最終変更時刻を取得する

SQL Serverによって開かれた*.ldf*.mdfのような他のプロセスによって既に開かれているファイルを処理しようとすると問題が発生します。ファイルHANDLEを取得しようとすると、エラーがスローされます。コードのその部分は、我々はファイルのサイズを取得し、使用して

#include <boost/filesystem.hpp> 

using namespace boost::filesystem; 

path filePath("path/to/the/file.ext"); 

std::cout << file_size(filePath) << "\n"; // Getting file size 
std::cout << last_write_time(filePath) << "\n"; // Getting write/modified time 

:別の方法として

が、私は boostライブラリがプロジェクトに依存関係として使用されていることに気づいたので、私は次のコードサンプルの作業を見つけました最後の書き込み時間。しかし、 には、作成された最終アクセス時刻がまだ必要です。どのように私はそれを達成することができますどのアイデア?

+1

ええええええ、彼らは間違いなくこの欠けている機能を追加するパッチをあなたから歓迎します。一方、代わりにFindFirstFile()を使用してください。ハード・ロックされ、dbaseエンジンによって継続的に更新されるファイルのこれらのプロパティーを取得することは意味がなく、特にファイル・サイズと最終アクセス時間は非常に遅れて更新されることに注意してください。確かに良い方法がありますが、「理由」なしで推測することは不可能です。 –

答えて

0

ブーストFileSystemは、ファイルの作成/最終アクセス時刻の取得をサポートしていないようです。

状況の下で、私はおそらくあなたが欲しい情報を得るためにFindFirstFile(およびFindClose)を使用したい:

WIN32_FIND_DATA GetFileInfo(char const *path) { 
    WIN32_FIND_DATA data; 

    HANDLE h; 

    h = FindFirstFile(path, &data); 
    FindClose(h); 
    return data; 
} 

これは、ファイルを開く必要がないので、ファイルに関するデータを取得することができ、そのファイルが現在別のプロセスで開かれている場合でも同様です。

+0

ありがとう@ジェリー棺、提案された解決策は働いた。 –

関連する問題