C ++检查文件是否存在而不打开它?

时间:2012-12-16 14:15:38

标签: c++ performance

有没有办法检查文件是否存在(现在只在Windows上),而不会产生开放费用?

目前我正在使用:

ifstream ifile(FilePath);

if(ifile){

但问题是我然后将文件放入boost mapped_region,从而打开文件两次。如果我可以检查文件是否存在而不必打开它会更好。

3 个答案:

答案 0 :(得分:3)

请记住,即使您检查然后尝试打开,也总是有可能在您检查文件和尝试打开之间移动/删除文件,这对这些操作始终是一种危险。

仅仅打开文件缓冲区作为映射区域创建的一部分可能更有效,但是要准备好捕获错误时抛出的interprocess_exception

答案 1 :(得分:1)

你知道,如果你将procmon(来自Sysinternals)附加到你的程序并查看Windows正在做什么,调用CreateFileGetFileAttributes它将导致相同数量的开销,在绩效方面没有明显的差异。

你可以使用NTFS Journal来加速某些事情,但这只会对特定工作负载有所帮助,通常不会检查磁盘上文件的可用性。

答案 2 :(得分:0)

access (stduni.h)

您要检查的是访问权限(FilePath,F_OK)== 0

这应该是检查文件是否存在的一种非常通用的方法。正如组件10所说的那样,你不能确定每次检查中存在的文件在并行场景中可能会发生多少,但是TBH并不重要。如果发生错误,您可能希望使用系统GetLastError(MSDN)函数,甚至将其留给编译器/系统来处理故障,如果您自己处理它,您可以要求输入名称并重试。