关于判断文件是否存在最高效的函数(转)
来源:互联网 发布:足球直播电脑软件 编辑:程序博客网 时间:2024/05/12 04:07
判断文件存在方法有很多,例如CreateFile,FindFirstFile,GetFileAttributes,PathFileExists等等。但是哪一种更加高效呢?其实作为常识,可能都能判断出GetFileAttributes和PathFileExists会比较快(而实际上PathFileExists就是调用的GetFileAttributes)。
下面是google一份开源代码中提到的统计结果
// NOTE: This is the fastest implementation I found. The results were:
// CreateFile 1783739 avg ticks/call
// FindFirstFile 634148 avg ticks/call
// GetFileAttributes 428714 avg ticks/call
// GetFileAttributesEx 396324 avg ticks/call
为什么会这样呢?大概了看了下,原因应该是这样的。
1.CreateFile会创建句柄,需要一个完整IO流程,所以需要的时间比如非常长。
2.FindFirstFile回去查询文件夹的文件,虽然不会真正的打开文件句柄,并且在文件已经被缓存的情况下,走的是fastio流程,所以查询时间大幅下降,但是操作略微繁琐,导致他不是最好的选择。
3. GetFileAttributes 和GetFileAttributesEx 也设置了QueryOnly标志,不需要获得真正的句柄,并且能够走fastio流程,也没有文件夹查询等工作,所以速度最快。
那么为什么GetFileAttributesEx 会快那么一点点呢?因为这个函数少了一个获取BasicInformation,也就是少了一个fastio流程。所以速度更快。这样看来,自己实现一个PathFileExistsEx效率可以高过PathFileExists了。(其实没多大实际意义)
google就是这样做的:
bool File::Exists(const TCHAR* file_name) { ASSERT1(file_name && *file_name); ASSERT1(lstrlen(file_name) > 0);// NOTE: This is the fastest implementation I found. The results were: // CreateFile 1783739 avg ticks/call // FindFirstFile 634148 avg ticks/call // GetFileAttributes 428714 avg ticks/call // GetFileAttributesEx 396324 avg ticks/call WIN32_FILE_ATTRIBUTE_DATA attrs = {0}; return 0 != ::GetFileAttributesEx(file_name, ::GetFileExInfoStandard, &attrs); }
转自:http://0cch.net/wordpress/?p=84
- 关于判断文件是否存在最高效的函数(转)
- 写了两个判断文件目录是否存在的函数
- 判断远程文件是否存在的php函数
- 在Visual foxpro 中判断文件是否存在的函数
- 判断远程文件是否存在的php函数
- 判断远程文件是否存在的PHP函数
- vc 判断文件是否存在的几个函数
- 判断远程文件是否存在的php函数
- C中判断文件是否存在的access函数
- jquery判断一个文件是否存在函数写法的历程
- VBA------ 判断某个文件是否存在函数
- C++ access函数判断文件是否存在
- get_headers函数判断远程文件是否存在
- access函数判断文件是否存在
- 关于文件存在的判断
- 关于VC隐藏文件和判断文件是否存在的判断
- 判断文件是否存在
- 判断文件是否存在
- Oracle数据库中的TM锁模式
- 外键缺乏索引导致的Oracle数据库死锁
- 【经典】Linux Shell快速入门小例子(shell十三问学习笔记)
- MySQL Replication 搭建步骤(InnoDB)
- 有两种方式构建软件
- 关于判断文件是否存在最高效的函数(转)
- MySQL中的奇特之处:数据类型
- MySQL中的字符集
- 如何重置MySQL数据库管理员(root)密码
- Excel一个单元格中输入度分秒转换成小数(如256.3246(读256度32分46秒))
- 有监督的数据挖掘
- Python初学
- 【转载】python变量赋值(可变与不可变)
- 几个开源的网店系统