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

2024-05-03

        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)之前,我需要检查该文件是否已完成。如果文件不完整,我稍后会检查该文件。

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

Case I:

首先日志文件不完整(即最后一行没有 END)

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

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

Case II:

首先日志文件不完整(即最后一行没有 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;
        }

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

为什么在情况二中,boost 函数会返回 false,而在情况一中,函数会返回 true。


why boost::filesystem::exists当文件存在时返回 false?

不会的。该文件确实not exist.

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么当文件存在时 `boost::filesystem::exists` 返回 false? 的相关文章

随机推荐