2010-12-10 13 views
1

私はnoobからC++ Boostです。誰でもこのプログラムをデバッグするのを助けることができます。これをデバッグするのを助けてください - 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のように、私はエラーを取得しています。このプログラムを実行しようとしています。 P.S.このプログラムはすべてのファイル/フォルダを一覧表示します

答えて

4

あなたはこれが正常に動作し取得するようにする必要があり二つの変更があります。まず、イテレータはパスではなくbasic_directory_entryのインスタンスを返します。最初にイテレータからpathを照会する必要があります。また、新しいバージョンのブーストでは、アクセサメソッドから接頭辞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(".") ; 
} 
+0

になります。しかし、それは多くのエラーを与えます。 BTW tanx for ur response – Allwyn

+0

これは私のマシン(Boost 1.44のOS X)で完全にコンパイルして実行します。上記のあなたのコードからの唯一の変更です。あなたが得ているエラーは何ですか?この問題は、BoostファイルシステムAPIのv2からv3への変更によって引き起こされる可能性があります。これは、多数のインターフェイス変更を行います。あなたが使用しているバージョンを教えてもらえれば、私たちはそれを解決することができます。 – gavinb

+0

私は1.45を使用しています。 – Allwyn

1

私はドキュメントをすこし見ていましたが、native_directory_stringまたはnative_file_stringについてはbasic_directory_entryに対して何も触れていません。 AFAICT、これらのメンバ関数は、私はあなたがこれbasic_directory_entryからアクセスすることができると思う別のクラス(filesystem::path)に属し:

iter->path().native_directory_string() 
4

、私は

ブースト::ファイルシステムをメモしておきたいです:: wpath :: native_file_string()は廃止され、boost :: filesystem :: wpath :: string()に変更されました。だから、次の行

cout << iter->native_file_string() << " (file)\n" ; 

は、私は上記のコードを試みた

cout << iter->string() << " (file)\n" ; 
関連する問題