0

有没有办法检查文件是否存在(目前仅在 Windows 上)而不会产生打开它的成本?

目前我正在使用:

ifstream ifile(FilePath);

if(ifile){

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

4

3 回答 3

3

请记住,即使您进行检查然后尝试打开,在您检查文件和尝试打开之间始终存在文件可能被移动/删除的可能性,这对于这些类型的操作来说总是一种危险。

在创建映射区域的过程中简单地打开文件缓冲区可能更有效,但要准备好捕获interprocess_exception错误时抛出的错误。

于 2012-12-16T14:34:59.973 回答
1

您知道,如果您将 procmon(来自 Sysinternals)附加到您的程序并查看 Windows 在后台执行的操作、调用CreateFileGetFileAttributes将导致相同数量的开销,则在性能方面没有明显差异。

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

于 2012-12-16T14:34:46.400 回答
0

访问(stduni.h)

您要检查的是access(FilePath, F_OK)==0

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

于 2015-01-29T10:25:23.540 回答