从C ++中的锁定文件获取创建,上次访问和上次修改时间

时间:2016-12-06 22:33:37

标签: c++ boost boost-filesystem

我目前正在尝试修复遗留应用程序代码中的错误,在该代码中,它使用基本GetFileTime函数通过使用HANDLE函数获得的CreateFileW来检索文件信息。

当它尝试使用由*.ldf打开的*.mdfSQL Server文件等其他进程已打开的文件时,会出现问题。尝试获取文件HANDLE时会引发错误。

作为替代方案,我注意到boost库被用作项目中的依赖项,因此我发现以下代码示例有效:

#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

使用这段代码我们得到文件大小和最后写入时间。但是,我仍需要创建和上次访问时间。任何想法我怎样才能实现它?

1 个答案:

答案 0 :(得分:2)

Boost FileSystem似乎不支持检索文件的创建/上次访问时间。

在这种情况下,我可能会使用FindFirstFile(和FindClose)来获取您想要的信息:

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

    HANDLE h;

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

这不需要打开文件,因此它可以检索有关文件的数据,即使该文件当前在另一个进程中打开。