3

プログラムの動作に影響を与えるために、ファイルからプロパティを読み取る必要があります。boost::property_tree は非常にうまく機能するようです。しかし、さまざまな種類の値をフェッチするときに、ライブラリがファイルを複数回読み取る可能性があるのではないでしょうか?

パフォーマンス上の理由から、一度だけにしたいと思います。ほとんどのプロパティは、数値や文字列などの単純な値になります。しかし、時折、数字のリストと文字列のリストがあります。

ファイルを一度だけ解析すると思いますが、わからないので質問です。

ありがとう。

4

2 に答える 2

3

You control it, and it reads only once:

//
// All that is required to read an xml file into the tree
//

std::ifstream in("region.xml");
boost::property_tree::ptree result_tree;
boost::property_tree::read_xml(in,result_tree);

Include the correct header and read ini, json or xml files into the tree using the corresponding read_XXX method.

You then use a "path" to access elements from the tree, or you can iterate over subtrees

BOOST_FOREACH(boost::property_tree::ptree::value_type &v,result_tree.get_child("gpx.rte"))
{
      if( v.first == "rtept" ) //current node/element name
      {
           boost::property_tree::ptree subtree = v.second ;
           //A path to the element is required to access the value
          const int lat = sub_tree.get<double>( "<xmlattr>.lat")*10000.0;
          const int lon = sub_tree.get<double>( "<xmlattr>.lon")*10000.0;
      }
}

or direct access via a path:

  // Here is simplistic access of the data, again rewritten for flexibility and 
  // exception safety in real code (nodes shortened too)
  const int distVal = 
       result_tree.get<int>
        ( "Envelope.Body.MatrixResponse.Matrix.Route.<xmlattr>.distance")/1000;
于 2012-12-14T21:01:07.437 に答える
1

読み取りたいたびに、ファイルが変更されたかどうかを確認できます。もしそうなら、あなたはそれを読むことができます。

char filename[] = "~/test.txt";
char timeStr[100] = "";
struct stat buf;
time_t ltime;
char datebuf[9];
char timebuf[9];
if (!stat(filename, &buf)) {
    strftime(timeStr, 100, "%d-%m-%Y %H:%M:%S", localtime(&buf.st_mtime));
    printf("\nLast modified date and time = %s\n", timeStr);
}
else {
    printf("error getting atime\n");
}

_strtime(timebuf);
_strdate(datebuf);
printf("\nThe Current time is %s\n",timebuf);
printf("\nThe Current Date is %s\n",datebuf);
time(&ltime);

if (difftime(ltime ,buf.st_mtime) > 0) {
   // Read it.
}
于 2012-12-14T21:02:03.407 に答える