我很喜欢C ++ Boost。这里的任何人都可以帮我调试这个程序。
#include <iostream>
#include <boost/filesystem/operations.hpp>
#include <boost/filesystem/fstream.hpp>
using namespace boost::filesystem;
using namespace std;
void show_files( const path & directory, bool recurse_into_subdirs = true )
{
if( exists( directory ) )
{
directory_iterator end ;
for( directory_iterator iter(directory) ; iter != end ; ++iter )
if ( is_directory( *iter ) )
{
cout << iter->native_directory_string() << " (directory)\n" ;
if( recurse_into_subdirs ) show_files(*iter) ;
}
else
cout << iter->native_file_string() << " (file)\n" ;
}
}
int main()
{
show_files( "." ) ;
}
温我试图运行这个程序我得到的错误就像
ex2.cpp: In function ‘void show_files(const boost::filesystem2::path&, bool)’:
ex2.cpp:15: error: ‘class boost::filesystem2::basic_directory_entry<boost::filesystem2::basic_path<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::filesystem2::path_traits> >’ has no member named ‘native_directory_string’
ex2.cpp:19: error: ‘class boost::filesystem2::basic_directory_entry<boost::filesystem2::basic_path<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::filesystem2::path_traits> >’ has no member named ‘native_file_string’
提前Tanx。附:该程序将列出所有文件/文件夹
答案 0 :(得分:4)
要使其正常工作,您需要进行两项更改。首先,迭代器返回basic_directory_entry
的实例,而不是路径。首先,您需要从迭代器中查询path
。此外,较新版本的boost已经从访问器方法中删除了native_
前缀。
以下是包含更改的代码:
#include <iostream>
#include <boost/filesystem/operations.hpp>
#include <boost/filesystem/fstream.hpp>
using namespace boost::filesystem;
using namespace std;
void show_files( const path & directory, bool recurse_into_subdirs = true )
{
if( exists( directory ) )
{
directory_iterator end ;
for( directory_iterator iter(directory) ; iter != end ; ++iter )
if ( is_directory( *iter ) )
{
cout << iter->path().directory_string() << " (directory)\n" ;
if( recurse_into_subdirs ) show_files(*iter) ;
}
else
cout << iter->path().file_string() << " (file)\n" ;
}
}
int main()
{
show_files( "." ) ;
}
答案 1 :(得分:4)
由于我不能简单地在(当前)最佳答案中添加评论,我想留意
boost :: filesystem :: wpath :: native_file_string()被弃用并更改为boost :: filesystem :: wpath :: string()。所以以下一行
cout << iter->native_file_string() << " (file)\n" ;
变为
cout << iter->string() << " (file)\n" ;
答案 2 :(得分:1)
我快速查看了文档,但在basic_directory_entry中找不到native_directory_string
或native_file_string
。 AFAICT,这些成员函数属于不同的类(filesystem::path
),我认为您可以从basic_directory_entry
访问它们:
iter->path().native_directory_string()