وينرت:التطبيق لتعداد الملفات خارج المكتبات والمجلدات المعروفة

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

سؤال

أنا أعمل على تطبيق Metro الذي يعرض محتوى مجلد معين في عنصر تحكم ListView.قرر MS أن المطورين لا يحتاجون إلى فئة System.IO.Directory وقاموا بإزالتها بالكامل من إطار العمل.

أنا أبحث عن بديل لتعداد الملفات في C# في تطبيق على طراز المترو.لقد قمت بفحص جميع نماذج التعداد المقدمة من MS ويبدو أنها جميعًا تقوم فقط بتعداد مكتبات Windows باستخدام KnownFolders الطبقة، شيء من هذا القبيل:

StorageFolder picturesFolder = KnownFolders.PicturesLibrary;

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

هل يعرف أحد كيف يكون ذلك ممكنًا في WinRT؟؟؟

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

المحلول

أنت، حسب التصميم، محدود للغاية في هذا المجال لتطبيقات Metro.الفكرة هي أن تطبيق Metro يُمنح فقط حق الوصول إلى الأشياء التي يُثق في الوصول إليها، لذا يمكنك إما:

  1. الوصول إلى التخزين المحلي الخاص بتطبيقك
  2. الوصول إلى عدد قليل من مواقع التخزين المعروفة، أو
  3. الوصول إلى موقع محدد على وجه التحديد.

نلقي نظرة على http://msdn.microsoft.com/en-us/library/windows/apps/hh464959.aspx للحصول على فكرة عما ستتمكن من الوصول إليه.

نصائح أخرى

من http://tirania.org/blog/archive/2011/Sep-15.html :

عند استخدام C# وVB، فإنك تستخدم إطار عمل .NET الكامل.لكنهم اختاروا فضح مجموعة فرعية أصغر من واجهة برمجة التطبيقات للمطورين لدفع الرؤية الجديدة لنظام التشغيل Windows 8.

وتشمل هذه الرؤية الجديدة أنظمة السلامة/الرمل والبرمجة غير المتزامنة.هذا هو السبب في أنك لا تحصل على الوصول المباشر لنظام الملفات أو الوصول إلى المقبس ولماذا لا يتم كشف واجهات برمجة التطبيقات المتزامنة التي اعتدت على الاستهلاك.

والآن لاحظت أنني قلت "مكشوف" وليس "ذهب".

ما فعلوه هو أنهم يتعرضون فقط للمترجم مجموعة من واجهات برمجة التطبيقات عندما تستهدف ملف تعريف المترو.لذلك لن يتصل طلبك عن طريق الخطأ.على الرغم من وقت التشغيل ، ستقوم CLR بتحميل مكتبة الفئة الكاملة ، وهي المكتبة التي تحتوي على file.create ، لذلك داخليًا ، يمكن لـ CLR الاتصال بشيء مثل ملف.

يشبه هذا الانقسام ما تم القيام به في الماضي مع Silverlight ، حيث لم يتم كشف كل واجهة برمجة تطبيقات ، وحيث تم منح MSCORLIB حقوقًا لم يكن على طلبك ضمان سلامة النظام.

قد تفكر في أنه يمكنك استخدام بعض الخدعة (الرجوع إلى مكتبة GAC بدلاً من مرجع التحويل البرمجي أو استخدام التفكير للوصول إلى واجهات برمجة التطبيقات الخاصة ، أو P/الاحتجاج في Win32).ولكن سيتم اكتشاف كل هذه الاستخدامات بواسطة تطبيق AppStore Review ولن تتمكن من نشر تطبيقك من خلال متجر Microsoft.

لا يزال بإمكانك القيام بأي اختراق قبيح تريده على نظامك.لن يكون من الممكن نشر ذلك من خلال appstore.

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

بشكل عام هذا منطقي:لا أرغب في تنزيل تطبيق يبدو شرعيًا فقط لأقوم بفحص محرك الأقراص الثابتة الخاص بي والعثور على جدول البيانات "budget.xls" الذي يتضمن معلوماتي المصرفية/الائتمانية.

يحرر:من الممكن منح الوصول المؤقت إلى الملفات/المجلدات الآمنة من خلال منتقي الملفات الخاص بـ WinRT، ولكن يجب استدعاءه واختياره بشكل صريح من قبل المستخدم.

يمكنك استخدام ال StorageFolder.GetFolderFromPathAsync طريقة الحصول على أ مجلد التخزين مثيل من المسار.

StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(@"C:\...");

لاحظ أنه قد لا يكون لديك إذن للقيام بذلك لجميع المسارات الموجودة على جهازك.

حالة مماثلة.مطلوب الوصول إلى ملف إشارات Chrome المرجعية لتحليله.كان يجب استخدام FileOpenPicker في البداية، ولكن يمكن "تخزين الملف الذي يُرجعه مؤقتًا" في قائمة الوصول المستقبلية (؟) لاسترجاعه لاحقًا.

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