从 C++ 中的锁定文件获取创建、上次访问和上次修改时间
Getting created, last accessed and last modified times from locked files in C++
我目前正在尝试修复遗留应用程序代码中的一个错误,该代码基本上使用 GetFileTime 函数通过使用 CreateFileW
函数获得的 HANDLE
来检索文件信息。
当它试图处理已经被其他进程打开的文件时会出现问题,例如 *.ldf
和 *.mdf
由 SQL 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
使用那段代码我们得到文件大小和最后写入时间。但是,我仍然需要创建和最后访问的时间。有什么想法可以实现吗?
Boost FileSystem 似乎不支持检索文件的 creation/last 访问时间。
在这种情况下,我可能会使用 FindFirstFile
(和 FindClose
)来获取您想要的信息:
WIN32_FIND_DATA GetFileInfo(char const *path) {
WIN32_FIND_DATA data;
HANDLE h;
h = FindFirstFile(path, &data);
FindClose(h);
return data;
}
这不需要打开文件,因此它可以检索有关文件的数据,即使该文件当前正在另一个进程中打开。
我目前正在尝试修复遗留应用程序代码中的一个错误,该代码基本上使用 GetFileTime 函数通过使用 CreateFileW
函数获得的 HANDLE
来检索文件信息。
当它试图处理已经被其他进程打开的文件时会出现问题,例如 *.ldf
和 *.mdf
由 SQL 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
使用那段代码我们得到文件大小和最后写入时间。但是,我仍然需要创建和最后访问的时间。有什么想法可以实现吗?
Boost FileSystem 似乎不支持检索文件的 creation/last 访问时间。
在这种情况下,我可能会使用 FindFirstFile
(和 FindClose
)来获取您想要的信息:
WIN32_FIND_DATA GetFileInfo(char const *path) {
WIN32_FIND_DATA data;
HANDLE h;
h = FindFirstFile(path, &data);
FindClose(h);
return data;
}
这不需要打开文件,因此它可以检索有关文件的数据,即使该文件当前正在另一个进程中打开。