目录路径上的boost::filesystem exists()失败,但is_directory()正常

目录路径上的boost::filesystem exists()失败,但is_directory()正常,boost,boost-filesystem,Boost,Boost Filesystem,我使用boost文件系统获取当前目录的路径,然后检查该目录是否存在 is\u directory()正常,但是exists()在同一路径上失败,我是否遗漏了什么 示例代码(boost 1.35): 但是: 以下内容来自Boost源代码: inline bool is_directory( file_status f ) { return f.type() == directory_file; } inline bool exists( file_status f ) { return

我使用boost文件系统获取当前目录的路径,然后检查该目录是否存在

is\u directory()
正常,但是
exists()
在同一路径上失败,我是否遗漏了什么

示例代码(boost 1.35):

但是:


以下内容来自Boost源代码:

inline bool is_directory( file_status f ) { return f.type() == directory_file; }
inline bool exists( file_status f )       { return f.type() != status_unknown && f.type() != file_not_found; }
如您所见,如果
is_directory
返回true,则
exists
也必须返回true。可能问题在代码的其他地方-请发布一个显示问题的最小可编译示例


您可能还想尝试对两个调用使用相同的
文件\u status
对象,以查看输出
状态是否正在更改。

您使用的是Windows吗?这是底层Windows API的已知限制。在Windows上对我有效。您发布了一些代码片段,而不是可编译的示例。顺便说一句,我正在将
path
传递到
exists()
not
file\u status
,有一个函数接受
path
并返回
exists(status(path))
根据文档……仍然不是一个完整的示例(ifs中有什么?)。无论如何,你的新编辑毫无意义:你是说否定if的条件会改变Boost返回的值吗?这可能是代码中的一个简单问题,比如在if后面加一个分号。+1:)你是对的。。。当我复制代码时,我错过了半彩色:),太多的事情同时发生。。。
#include <boost/filesystem/operations.hpp>
#include <boost/filesystem/path.hpp>
namespace fs = boost::filesystem;

fs::path data_dir(fs::current_path());
// data_dir == "/home/myusername/proj/test"

if (fs::is_directory(data_dir))             // true - is directory
if (fs::is_directory(fs::status(data_dir))) // true - it is still a directory
if (fs::exists(fs::status(data_dir)))       // true - directory exists
if (fs::exists( data_dir ))                 // true - directory exists
if (!fs::exists(fs::status(data_dir)))      // false - directory still exists
if (!fs::exists( data_dir ))                // true  - directory does not exists
inline bool is_directory( file_status f ) { return f.type() == directory_file; }
inline bool exists( file_status f )       { return f.type() != status_unknown && f.type() != file_not_found; }