为什么 'boost::文件系统::exists' 当文件确实存在时返回 false

why `boost::filesystem::exists` return false when a file does exist?

本文关键字:存在 false 返回 exists boost 文件系统 为什么 文件      更新时间:2023-10-16
        const boost::filesystem::path fileName( "/tmp/hello.log" );
        if ( boost::filesystem::exists( fileName ) )
        {
            // do sth
        }
        else
        {
            std::cout << "file doesn't exist: " << std::endl;
        }

这是我遇到的问题:

在我处理日志文件(即/tmp/hello.log(之前,我需要检查文件是否已完成。如果文件不完整,我稍后会检查文件。

要运行模拟,我选择以下方法:

案例一:

第一个日志文件不完整(即最后一行没有 END(

$echo "END" >> /tmp/hello.log

我的应用程序按预期运行。换句话说,如果文件不完整,我的应用程序将重试,稍后成功处理已完成的日志文件。

案例二:

第一个日志文件不完整(即最后一行没有 END(我使用 vi 在最后手动插入一行,同时应用程序不断检查以下行:

        const boost::filesystem::path fileName( "/tmp/hello.log" );
        if ( boost::filesystem::exists( fileName ) )
        {
            // do sth
        }
        else
        {
            std::cout << "file doesn't exist: " << std::endl;
        }

最后一行附加到文件后,我的应用程序将报告错误并说"文件不存在"。但实际上,日志文件就在那里。

为什么在案例 II 中,boost 函数将返回 false,而在案例 I 中,函数返回 true。

当文件确实存在时boost::filesystem::exists为什么返回 false?

不会的。该文件不存在

你说这有效,除非你在 vi 中执行编辑。请记住,vi 不是一个简单的命令行工具,而是一个功能强大的文本编辑器。它很可能使用临时文件(例如,/tmp/hello.log~(进行修改。在保存更改之前,不会在 /tmp/hello.log 中找到这些更改。您应该研究 vi 的文档以获取有关其工作原理的更多信息。

您的程序可能没有足够的权限来统计文件,或者由于其他原因,统计该文件的请求失败。

从 boost 的文档中,请注意,exists()函数的返回值取决于统计操作是否返回错误。

布尔存在(file_status s( 否,除了

返回: status_known(s( && s.type(( != file_not_found

布尔 status_known(file_status 秒( 否

返回: s.type(( != status_error

http://www.boost.org/doc/libs/1_60_0/libs/filesystem/doc/reference.html#exists