有没有办法检查文件是否存在(现在只在Windows上),而不会产生开放费用?
目前我正在使用:
ifstream ifile(FilePath);
if(ifile){
但问题是我然后将文件放入boost mapped_region,从而打开文件两次。如果我可以检查文件是否存在而不必打开它会更好。
答案 0 :(得分:3)
请记住,即使您检查然后尝试打开,也总是有可能在您检查文件和尝试打开之间移动/删除文件,这对这些操作始终是一种危险。
仅仅打开文件缓冲区作为映射区域创建的一部分可能更有效,但是要准备好捕获错误时抛出的interprocess_exception
。
答案 1 :(得分:1)
你知道,如果你将procmon(来自Sysinternals)附加到你的程序并查看Windows正在做什么,调用CreateFile
或GetFileAttributes
它将导致相同数量的开销,在绩效方面没有明显的差异。
你可以使用NTFS Journal来加速某些事情,但这只会对特定工作负载有所帮助,通常不会检查磁盘上文件的可用性。
答案 2 :(得分:0)
您要检查的是访问权限(FilePath,F_OK)== 0
这应该是检查文件是否存在的一种非常通用的方法。正如组件10所说的那样,你不能确定每次检查中存在的文件在并行场景中可能会发生多少,但是TBH并不重要。如果发生错误,您可能希望使用系统GetLastError(MSDN)函数,甚至将其留给编译器/系统来处理故障,如果您自己处理它,您可以要求输入名称并重试。