将Boost FileSystem3迭代器强制转换为const char*

Casting a Boost FileSystem3 iterator to a const char*

本文关键字:const char 转换 Boost FileSystem3 迭代器      更新时间:2023-10-16

我正在使用Boost FileSystem 3在目录中循环一些文件,我需要将文件名转换为另一个库的char*,不幸的是我的c++ foo缺乏,有人能帮助吗?

  int main(int argc, char* argv[])
    {
      path p (argv[1]);   // p reads clearer than argv[1] in the following code
      try
      {
        if (exists(p))    // does p actually exist?
        {
          if (is_regular_file(p))        // is p a regular file?   
            cout << p << " size is " << file_size(p) << 'n';
          else if (is_directory(p))      // is p a directory?
          {
            cout << p << " is a directory containing:n";
            typedef vector<path> vec;             // store paths,
            vec v;                                // so we can sort them later
            copy(directory_iterator(p), directory_iterator(), back_inserter(v));
            sort(v.begin(), v.end());             // sort, since directory iteration
                                                  // is not ordered on some file systems
            for (vec::const_iterator it (v.begin()); it != v.end(); ++it)
            {
              cout << "   " << *it << 'n';
       /****************** stuck here **************************/
      // I need to cast *it to a const char* filename 
       /****************** stuck here **************************/
            }
          }
          else
            cout << p << " exists, but is neither a regular file nor a directoryn";
        }
        else
          cout << p << " does not existn";
      }
      catch (const filesystem_error& ex)
      {
        cout << ex.what() << 'n';
      }
      return 0;
    }

表达式*it返回类型为path的对象,因此您必须这样做:

const std::string & s = (*it).string(); 
const char *str = s.c_str(); //this is what you want

或者您想使用其他转换函数,如下所示:

const std::string & string() const;
std::string native_file_string() const;
std::string native_directory_string() const;

选择您想要使用的。首先阅读文档,了解它们各自返回的内容:

  • 增加/文件系统/path.hpp