الحصول على المسار المطلق من قريب في ويندوز فيستا يبدو أن تفشل باستخدام Win32 / شل PathCombine ()

StackOverflow https://stackoverflow.com/questions/351479

سؤال

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

والمسار النسبي (كما تصدرها WMP إلى قائمة تشغيل):

و..\..\..\Public\Music\Sample Music\Amanda.wma

والمسار انها لالنسبي هو:

وC:\Users\userX\Music\Playlists\playlist.wpl

ووPathCombine () إرجاع:

وC:\Users\userX\Public\Music\Sample Music\Amanda.wma

ولكن، يتم وضع الملف في الواقع هنا (إذا حكمنا من خلال مستكشف والحقيقة أنني لا أستطيع فتحه من التعليمات البرمجية):

وC:\Users\Public\Music\Sample Music\Amanda.wma

هل هذه مشكلة معروفة؟ هناك بعض وظيفة أخرى وأرجو أن تستخدم؟

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

المحلول

تحدد ثائق PathCombine أن المعلمة الثانية، <م> lpszDir ، هو "مؤشر إلى سلسلة منتهية خالية من الحد الأقصى لطول MAX_PATH الذي يحتوي على مسار الدليل". يبدو أنك تمرير اسم مؤهل بشكل كامل من ملف داخل الدليل، بدلا من اسم مؤهل بشكل كامل من الدليل. لذا، فإنه يزيل ثلاثة عناصر: playlist.wpl، قوائم التشغيل، والموسيقى، ومن ثم إلحاق ما تبقى

ويجب أن تكون قادرا على استخدام PathRemoveFileSpec لإزالة جزء من ملف مسار الدليل الخاص بك.

نصائح أخرى

وعند الجمع بين الخاص سلسلتين، وتحصل على ما يلي.

C:\Users\userX\Music\Playlists\playlist.wpl\..\..\..\Public\Music\Sample Music\Amanda.wma

وبما أن كل ".." سوف تمحو القسم السابق، كنت في نهاية ش [ع مع التسلسل التالي:

C:\Users\userX\Music\Playlists\playlist.wpl\..\..\..\Public\Music\Sample Music\Amanda.wma
C:\Users\userX\Music\Playlists\..\..\Public\Music\Sample Music\Amanda.wma
C:\Users\userX\Music\..\Public\Music\Sample Music\Amanda.wma
C:\Users\userX\Public\Music\Sample Music\Amanda.wma

وذلك لأن "PathCombine()" عدم اكتراثه ما إذا كان أي من شرائح المسار الخاص بك هي الملفات أو الدلائل. انها مجرد وسيلة غبية نسبيا من مطابقة الأحرف الملاحة الخاصة ( ".." و ".") ضد قطاعات الملاحة الحقيقية لتشكيل مسار بدون تلك الأحرف الملاحة الخاصة.

وانها مجرد افتراض أن "playlist.wpl" هو اسم الدليل في قضيتك. تجريد أن إيقاف (أو إضافة أخرى ".." في بداية المسار النسبي الخاص بك، خدعة لتجنب كود غريبة للتجريد من قسم اسم الملف)، وأنه ينبغي أن تعمل على ما يرام.

scroll top