سؤال

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

قد يقوم المنشئ بتعيين إما قريب (إلى موقع ملف الوصف) أو المسار المطلق.

عندما يتم استدعاء برنامجي ، يعطي المستخدم اسم ملف الوصف. قد لا يكون في دليل العمل الحالي ، وبالتالي فإن اسم الملف ب قد تحتوي أيضًا على أدلة.

لكي تجد برنامجي دائمًا ملفات الإدخال في الأماكن المناسبة ، أحتاج إلى الجمع بين هذه المعلومات. إذا كان المسار أ بالنظر إلى المطلق ، أحتاج إلى ذلك. إذا كان نسبيًا ، فأنا بحاجة إلى تسلسله إلى المسار ب (أي جزء الدليل من اسم الملف).

اعتقدت boost::filesystem::complete قد يؤدي المهمة لي. لسوء الحظ ، يبدو أنه ليس كذلك. كما أنني لم أفهم كيفية اختبار مسار مُعطى مطلقًا أم لا.

أيه أفكار؟

هل كانت مفيدة؟

المحلول

في الواقع كنت مضللاً تمامًا أولاً ، لكنني وجدت الآن الحل بنفسي. عندما يحمل "قاعدة" المسار A ، ويحمل اسم الملف B:

boost::filesystem::path basepath(base), filepath(filename);
if (!basepath.is_complete())
    basepath = filepath.remove_leaf() /= basepath;
base = basepath.string();

إنه يعمل مع Linux على الأقل (حيث سيكون من السهل جدًا القيام به دون زيادة ، ولكن حسنًا ..) ، لا يزال يتعين عليهم الاختبار باستخدام Windows.

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