تعزيز شجرة الملكية مع اسم الملف كمفتاح
-
21-09-2019 - |
سؤال
أحاول استخدام أسماء الملفات كمفتاح في Boost :: PropertyTree
ومع ذلك ، "." الحرف في اسم ملف مثل "example.txt" يؤدي إلى إضافة طبقة إضافية داخل شجرة الخاصية. الحل الأكثر وضوحا هو استبدال ". مع شخصية أخرى ، ولكن من المحتمل أن يكون هناك طريقة أفضل للقيام بذلك ، كما هو الحال مع شخصية الهروب.
في المثال التالي ، سيتم وضع القيمة 10 في العقدة "txt" ، طفل "مثال". بدلاً من ذلك ، أريد تخزين القيمة 10 في العقدة "example.txt".
ptree pt;
pt.put("example.txt", 10);
كيف يمكنني استخدام اسم الملف الكامل لعقدة واحدة؟
شكرا مقدما لمساعدتكم!
المحلول 2
كانت المشكلة أن الوثائق كانت قديمة. يجب إنشاء كائن نوع المسار على النحو التالي ، مع حرف آخر غير صالح لمسارات الملفات المحددة على أنه المحدد على النحو التالي:
pt.put(boost::property_tree::ptree::path_type("example.txt", '|'), 10);
لقد وجدت طريقًا إلى الحل من القائمة البريدية Boost في مجموعة الأخبار gmane.comp.lib.boost.devel التي نشرتها فيليب فاوشر.
نصائح أخرى
فقط أدخل الشجرة صراحة:
pt.push_back(ptree::value_type("example.txt", ptree(10)));
ال put
الطريقة ببساطة موجودة للراحة ، وهذا هو السبب في أنه يخلع تلقائيًا .
كطبقة إضافية. إن بناء value_type بشكل صريح كما أظهرت أعلاه يتجنب هذه المشكلة.
طريقة بديلة لحل المشكلة هي استخدام حجة إضافية في put
و get
, ، الذي يغير delimeter.
pt.put('/', "example.txt", "10");
pt.get<string>('/', "example.txt");
للسجل ، لم أستخدم هذا الفصل من قبل في حياتي. حصلت على كل هذه المعلومات مباشرة من الصفحة التي ربطتها بها ؛ )