ما الذي يحاول هذا المشروع القيام به من أجلي؟
اجعل من السهل استخدام API STD :: FileSystem عبر المنصات ، حتى تلك التي يكون فيها نظام الملفات std :: غير متوفر (مشروط).
[ليس مستخدم بازل؟ فقط استخدم Gulrak/FileSystem مباشرة.]
لماذا لا يمكنني استخدام نظام الملفات STD :: بشكل طبيعي؟
STD :: نظام الملفات غير متاح قبل MacOS 10.15 و iOS/TVOS 13.0 و WatchOS 6.0 ، حتى مع C ++ 17. إذا حاولت استخدام نظام الملفات std :: ، ستحصل على أخطاء مثل "خطأ:" المسار "غير متوفر: تم تقديمه في ..."
على الأقل في وقت كتابة هذا التقرير ، سوف يستهدف معظم مطوري Apple OSS أقدم من ذلك ، وبالتالي يحتاجون إلى خلفية نظام الملفات: هذه المكتبة مفيدة إذا كنت ترغب في استخدام نظام الملفات:
[سيتيح لك هذا أيضًا استخدام نظام الملفات STD :: في إصدارات C ++ الأقدم (C ++ 11 ON) ، ولكن هذا ليس الدافع الرئيسي. ما عليك سوى التحديث إلى أحدث إصدار C ++!]
كيف يحل هذا مشكلتي؟
ما عليك سوى استخدام مقتطف الإعداد أدناه ، #include "backport/filesystem.hpp" ثم استخدم FS :: كبديل إسقاط لنظام ملفات std :: في الكود الذي قد يستهدف منصات Apple.
تحت الغطاء ، نعود إلى Gulrak/Fielystem (فقط) في الثنائيات التي تحتاج إليها. Gulrak/FileSystem متوافق مع API مع STD :: نظام الملفات ، بحيث يمكنك كتابة نفس الكود الحديث الذي ستفعله ، وبمجرد أن يكون دعم نظام الملفات في كل مكان في كل مكان ، سيكون من السهل الانتقال من هذا shim. (ذات مرة ، عادنا إلى Boost :: نظام الملفات ، ولكن كانت هناك اختلافات كافية في واجهة برمجة التطبيقات لتكون مزعجة للغاية ، خاصة في جميع أنحاء الوقت ، على الرغم من أن نظام الملفات:
وقت الإعداد الأساسي: 2M
مرحبا ، مستخدم بازل؟ دعنا نلقيك باستخدام API STD :: نظام الملفات في أي وقت من الأوقات.
هناك مجموعة من النص هنا ولكن فقط لأننا نحاول تهجئة الأمور ونجعلها سهلة. إذا كان لديك مشاكل ، فأخبرنا بذلك ؛ نحن نحب مساعدتك في جعل الأشياء أفضل وأكثر اكتمالا - ونحب مساعدتك!
انسخ هذا إلى ملف WORKSPACE Bazel الخاص بك لإضافة هذا الريبو كاعتماد خارجي ، مع التأكد من التحديث لأحدث الالتزام لكل الإرشادات أدناه.
load ( "@bazel_tools//tools/build_defs/repo:http.bzl" , "http_archive" )
# Hedron's std::filesystem Backport
# Lets you use the std::filesystem API on Apple platforms, where it wouldn't otherwise be available.
# (Deployment targets before macOS 10.15, iOS/tvOS 13.0, and watchOS 6.0)
# Just use fs:: as a drop-in replacement for std::filesystem.
# https://github.com/hedronvision/bazel-cc-filesystem-backport
http_archive (
name = "hedron_std_filesystem_backport" ,
# Replace the commit hash in both places (below) with the latest, rather than using the stale one here.
# Even better, set up Renovate and let it do the work for you (see "Suggestion: Updates" in the README).
url = "https://github.com/hedronvision/bazel-cc-filesystem-backport/archive/315416306204ce6bb2983b4a923815a7e89eb727.tar.gz" ,
strip_prefix = "bazel-cc-filesystem-backport-315416306204ce6bb2983b4a923815a7e89eb727" ,
# When you first run this tool, it'll recommend a sha256 hash to put here with a message like: "DEBUG: Rule 'hedron_std_filesystem_backport' indicated that a canonical reproducible form can be obtained by modifying arguments sha256 = ..."
)
load ( "@hedron_std_filesystem_backport//:workspace_setup.bzl" , "hedron_backport_std_filesystem" )
hedron_backport_std_filesystem () أضف "@hedron_std_filesystem_backport" إلى deps الخاص بك ، و ...
# include " backport/filesystem.hpp "
fs::path p = ...واجهة برمجة التطبيقات هي نفسها std :: fileystem ، فقط تحت FS ::
راجع https://en.cppreference.com/w/cpp/filesystem لمستندات API.
لكن لدينا اقتراح ...
تأتي التحسينات بشكل متكرر إلى المكتبات الأساسية ، بما في ذلك تصحيحات الأمان ، لذلك نوصي بمتابعة تحديث.
نوصي بشدة بإعداد تجديد (أو ما شابه) في مرحلة ما للحفاظ على هذا التبعية (وغيرها) محدّثًا بشكل افتراضي. [نحن لسنا منتميين بتجديد أو أي شيء ، لكننا نعتقد أنه رائع. إنه يشاهد الإصدارات الجديدة ويرسل لك PRS للمراجعة أو الاختبار الآلي. إنه مجاني وسهل الإعداد. لقد كان مفيدًا بشكل مذهل في قاعدة كودنا ، وقد عملنا مع المشرف الرائع لجعل الأمور رائعة لاستخدام البازل. ويستخدم في مستودعات الأجزاء الرسمية-وهذا واحد!]
إذا لم يكن الأمر الآن ، فربما تعود إلى هذه الخطوة لاحقًا ، أو شاهد هذا الريبو للحصول على التحديثات. [أو مهلا ، ربما امنحنا نجمًا سريعًا ، بينما كنت تفكر في المشاهدة.] مثل Abseil ، نعيش في الرأس ؛ الالتزام الأخير بالفرع الرئيسي هو الالتزام الذي تريده. لذلك لا تعتمد على إشعارات الإفراج ؛ استخدم التجديد أو الاستطلاع يدويًا للالتزامات الجديدة.
طريقة لجعلها من خلال الإعداد. هتافات لتكون قادرة بسهولة على استخدام api std :: نظام ملفات في التعليمات البرمجية المحمولة.
إذا كنت تستخدم Bazel لـ C ++ ، فمن المحتمل أن تريد أيضًا بعض أدواتنا الأخرى ، مثل ...