سؤال

أنا أكتب تطبيقا عبر النظام الأساسي يحتاج إلى تفتيش وتلاعب مسارات Windows.

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

يستخدم الرمز الحالي boost::filesystem::path أي من بالطبع يعمل مثل سحر على Windows:

boost::filesystem::path the_path(the_path_as_a_string);
if (!the_path.has_root_path()) { /* do stuff */ }

المشكلة في هذا النهج هي ذلك boost::filesystem::path فقط لديه نوعان من وضعان: الأم والخاصة. هذا يعني أن Grammar Path Path غير متاح عند ترجمة Linux (هو #ifdefإد بها في المصدر). وبالتالي، فإن المسار "C: Path" يعتبر مطلقا في Windows، ولكن بالنسبة إلى Linux.


هل يمكنك أن توصي رفاق مكتبة C ++ عبر المنصة التي يمكن أن تفقد وتلاعب مسارات Windows؟


في الوقت الحالي، عملية Windows-Path الوحيدة التي سأفعلها هي التحقق مما إذا كان المسار مطلقا أم لا.

المعيار الذي سأستخدمه للمسار المطلق هو أنه يحتوي على حرف محرك الأقراص، ويبدأ المسار \. وبعد مثال على الطريق المطلق بموجب هذا المعيار هو C:\path. وبعد هذه كلاهما أمثلة على المسارات النسبية بموجب هذا المعيار: C:path, \path.

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

المحلول 2

يبدو أنه من الصعب العثور على مكتبة لهذا. احتمال واحد هو PathIsRelative في WinELIB، لكنني لا أريد استخدام WinELIB.

انتهى بي الأمر بعمل حل محدد للغاية فقط لتحديد هذا الشيء الصغير. على افتراض أن المسار صحيح (افتراض عادل في حالتي)، سيحتوي المسار المطلق :\, ، في حين أن المسار النسبي لن.

لذلك، السيئة، ولكن العمل، الحل هو: لا توجد مكتبة مناسبة. تحقق من وجود :\.

نصائح أخرى

ماذا عن كيو تي qfileinfo. ?

هل يمكن أن توضح ما يهدف إليه البرنامج مع مسارات Windows على Linux؟

ربما يكفي تطبيق بعض التحول البسيط إلى سلسلة مسار Windows، وتحويلها بطريقة بناءة إلى مسار UNIX، ثم استخدم Bost :: نظام الملفات لمعالجةها.

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