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
这意味着 。
是 当前目录,您可以相信它们的属性是相同的。但无论如何我不明白为什么你不能忽略 dot 和 dotdot 文件。
关于windows - FindFirstFile 和 "."/".."记录属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20091393/