سؤال

أحاول استخدام أسماء الملفات كمفتاح في 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");

للسجل ، لم أستخدم هذا الفصل من قبل في حياتي. حصلت على كل هذه المعلومات مباشرة من الصفحة التي ربطتها بها ؛ )

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top