سؤال

صادفت مكتبة AC لفتح الملفات التي تم إعطاء اسم ملف Unicode. قبل فتح الملف ، يقوم أولاً بتحويل اسم الملف إلى مسار عن طريق إعداد "؟ ". هل هناك أي سبب للقيام بذلك بخلاف زيادة الحد الأقصى لعدد الأحرف المسموح به في المسار ، لكل هذه المقالة MSDN?

يبدو أن هذه المسارات "؟ " تتطلب إصدارات Unicode من Windows API والمكتبة القياسية.

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

المحلول

نعم ، إنه لهذا الغرض فقط. ومع ذلك ، من المحتمل أن ترى مشاكل التوافق إذا قررت إنشاء مسارات عبر طول MAX_PATH. على سبيل المثال ، لا يمكن لـ Explorer Shell ومطالبة الأوامر (على الأقل على XP ، لا أعرف عن Vista) التعامل مع المسارات على هذا الطول وستعود الأخطاء.

نصائح أخرى

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

لقد أدارت خادم ملفات سيحصل بشكل روتيني على الملفات path_length > MAX_PATH. كما ترى ، رأى المستخدمون الملفات كـ H:\myfile.txt, ، ولكن على الخادم كان في الواقع H:\users\username\myfile.txt. لذلك إذا قام المستخدم بإنشاء ملف مع بالضبط MAX_PATH الأحرف ، على الخادم كان MAX_PATH+len("users\username").

(إنشاء ملف باستخدام أحرف MAX_PATH ليس من غير المألوف ، لأنه عند حفظ صفحة ويب على Internet Explorer ، فإنه يستخدم عنوان الصفحة كاسم الملف ، والذي يمكن أن يكون طويلاً لبعض الصفحات).

أيضًا ، مشاركة محرك أقراص (عبر الشبكة أو USB) باستخدام جهاز Mac أو جهاز Linux ، يمكنك العثور على ملفات مع أسماء مثل Con أو PRN أو LPT1. ومرة أخرى ، يتيح لك البادئة والبرامج النصية معالجة هذه الملفات.

أعتقد أن أول شيء يجب ملاحظته هو أن "؟ " لا يجعل المسار مسارًا UNC. كنت أكثر دقة في المرة الثانية التي تطلق عليها عليهانمط طريق. ولكن حتى ذلك الحين ، فإن التشابه يأتي فقط من وجود اثنين من الاضطرابات الخلفية في البداية. لا علاقة له حقًا بـ UNC. هذا مدفوع بحقيقة أنه يجب عليك استخدامه أكثر الأحرف للحصول على مسار UNC مع البادئة "؟ ".

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

شيء واحد يجب ملاحظة أن البادئة غير مسموح بالمسارات النسبية ، فقط للمسارات المطلقة. قد ترغب في التحقق من أن مكتبة C تكرم هذا التقييد.

بالإضافة إلى السماح للمسارات الأطول ، يتيح لك البادئة "؟ " أيضًا استخدام الملفات وأسماء الدليل مثل "Con" و "Aux". عادةً ما يفسر النوافذ تلك على أنها أجهزة DOS القديمة.

لقد كنت أكتب رمز Windows منذ عام 1995 ، وعلى الرغم من أنني على دراية بهذا البادئة ، إلا أنني لم أجد أي سبب لاستخدامه. زيادة طول المسار بعد ذلك MAX_PATH يبدو أن السبب الوحيد لذلك ، ولم أفعل أنا أو أي من عملاء برامجي ذلك على حد علمي.

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