FindFirstFile和“。” /“..”记录属性

时间:2013-11-20 09:01:01

标签: windows winapi filesystems

FindFirstFile在引用的目录中返回的点/双点文件记录的元数据是什么对象?

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

我问,因为我正在制作的构建工具决定缓存搜索结果,首先将文件名转换为绝对文件名并归档元数据,当后续目录的创建时间不匹配时导致破坏的构建。

我可以依赖于“。”的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;
}

1 个答案:

答案 0 :(得分:1)

来自MSDN

  

使用句点作为路径中的目录组件来表示当前目录...

     

使用两个连续句点(..)作为路径中的目录组件来表示当前目录的父级

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