为什么 'boost::文件系统::exists' 当文件确实存在时返回 false
why `boost::filesystem::exists` return false when a file does exist?
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
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- C++模板来检查友元函数的存在
- 伪造事实↔false
- QueryWorkingSet总是返回false
- 既然存在危险,为什么项目要使用-I include开关
- 我们可以访问一个不存在的联盟的成员吗
- C++:对不存在的命名空间使用命名空间指令
- C++quit()函数中可能存在作用域问题
- C++擦除(如果存在)
- g++ 说函数不存在,即使包含正确的标头
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 有了gcc,是否可以链接库,但前提是它存在
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- gcc和clang在表达式是否为常量求值的问题上存在分歧
- C++Builder中的OnClick事件签名存在问题
- 如何正确地将分支添加到已存在的树中
- 我知道函数调用中存在歧义.有没有办法调用foo()函数
- true/false功能如果存在总和
- 为什么 'boost::文件系统::exists' 当文件确实存在时返回 false
- 提升c++属性-若键不存在,则设置为false