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(使用前将#替换为@)