windows - FindFirstFile 和 "."/".."记录属性

标签 windows winapi filesystems

FindFirstFile返回的指向目录的点/双点文件记录的元数据是什么对象?

在实践中,它们似乎表现为软链接(soft link)和硬链接(hard link)的奇怪混合体。在我的系统上,文件属性(例如只读/隐藏/存档标志)确实反射(reflect)了它们指向的目标的状态,但是创建/写入/访问访问字段似乎总是等于被搜索目录的创建时间。

我问是因为我正在使用的构建工具决定通过首先将文件名转换为绝对文件名并归档元数据来缓存搜索结果,当后来目录的创建时间不匹配时导致构建失败。

我可以依赖“.”的ftCreationTime吗?等于文件夹本身的创建时间?这有助于避免不必要的查询。

这里记录一个快速而肮脏的重现:

#include <stdio.h>
#include <windows.h>

static void print(const WIN32_FIND_DATAA *data) {
    printf("name=%s attrib=%08lX creation=%08lX%08lX\n", data->cFileName, data->dwFileAttributes,
        data->ftCreationTime.dwHighDateTime, data->ftCreationTime.dwLowDateTime);
}

int main(void) {
    WIN32_FIND_DATAA data = { 0 };
    HANDLE handle = FindFirstFileA("C:\\Windows\\System\\*", &data); 
    print(&data);
    FindNextFileA(handle, &data);
    print(&data);
    FindFirstFileA("C:\\Windows", &data); 
    print(&data);
    FindFirstFileA("C:\\Windows\\System", &data); 
    print(&data);
    return 0;
}

最佳答案

来自 MSDN :

Use a period as a directory component in a path to represent the current directory...

Use two consecutive periods (..) as a directory component in a path to represent the parent of the current directory

这意味着 当前目录,您可以相信它们的属性是相同的。但无论如何我不明白为什么你不能忽略 dotdotdot 文件。

关于windows - FindFirstFile 和 "."/".."记录属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20091393/

相关文章:

windows - 如何设置 IntelliJ 来记住 Git Bash session 之间的当前工作目录?

windows - 编译 GCC 7 : error: C++ preprocessor "/lib/cpp" fails sanity check

c++ - 如何在 C++ 中正确且可移植地处理大文件(4+ GB)?

c++ - 当用户点击一个键时显示一条消息

windows - 关联 App Store 应用程序和桌面应用程序的方法

c++ - 关于选择 MFC CListCtrl 项

windows - PostgreSQL 不断提示输入我从未在 PowerShell 中提供的密码

c - 使用 opendir()、readdir() 和 closedir() 高效地遍历目录树

javascript - 使用 JavaScript 检测文件系统上的页面何时发生更改

swift - 苹果操作系统 : is there any way to sniff system open call without kernel