我在一个独立于操作系统的文件管理器上工作,我在Windows上正确检测文件是否是目录时遇到问题.direntWindows上的结构似乎没有DT_DIR字段,所以我使用:
file_attributes=GetFileAttributes(ep->d_name);
if(file_attributes & FILE_ATTRIBUTE_DIRECTORY)files_list[i].is_dir=1;
else files_list[i].is_dir=0;
Run Code Online (Sandbox Code Playgroud)
但是,这并不总是准确的,因为某些文件被标记为目录(例如,pagefile.sys).此外,GetFileAttributes如果你有很多文件,那就相当慢.
我也有一个功能:
int does_dir_exist(char *path)
{
DIR *dp_test;
dp_test = opendir(path);
if(dp_test)
{
return 1;
closedir(dp_test);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但这很慢(在10000个文件上做这个不是一个好主意).
当然,我可以将两者结合得非常快,但有更好的方法吗?
PS由于某些原因无法为第二个功能正确格式化代码.
只是用GetFileAttributes(). opendir并且closedir不会更快(你是否对它进行了分析?你是否重复了测试以避免缓存效应?).
是的,GetFileAttributes() 是准确的.你认为它失败的原因是因为当你试图获得属性时pagefile.sys,它会失败并返回INVALID_FILE_ATTRIBUTES,这就是(DWORD)-1.当你用FILE_ATTRIBUTE_DIRECTORY它测试时,它返回true,因为-1它中设置了每一位.
你运行多少个文件?无论使用哪种函数,这都将是一个I/O绑定操作,因为为了确定文件的属性,必须从磁盘(或磁盘缓存)读取父目录.
| 归档时间: |
|
| 查看次数: |
1076 次 |
| 最近记录: |