Question

Je suis en train de travailler sur une application de Métro qui affiche le contenu d'un dossier dans un contrôle ListView.MS a décidé que les développeurs n'ont pas besoin du Système.IO.Répertoire de la classe et retiré complètement de la cadre.

Je suis à la recherche d'un remplacement pour énumérer les fichiers en C# dans une application de style metro.J'ai vérifié toutes l'énumération des échantillons fournis par MS et ils semblent tous à seulement énumérer les Bibliothèques de Windows à l'aide de la KnownFolders classe, quelque chose comme:

StorageFolder picturesFolder = KnownFolders.PicturesLibrary;

et l'appel de la GetFilesAsync() ou GetFoldersAsync() méthodes en fonction de vos besoins.Ce sont toutes des pièces d'or si je voulais énumérer seulement à l'intérieur des images ou de la musique de la bibliothèque.Cependant, je suis à la recherche d'énumérer les fichiers dans des répertoires qui ne sont pas inclus dans une bibliothèque.

Quelqu'un sait comment cela est possible dans WinRT???

Était-ce utile?

La solution

Vous êtes, de par leur conception, sont extrêmement limitées dans ce domaine pour les applications Metro.L'idée est qu'une application de Métro est à seulement accès à ces choses qu'il est approuvé à l'accès, de sorte que vous pouvez soit:

  1. l'accès de stockage local, spécifique à votre application
  2. accéder à une poignée de bien-connu des emplacements de stockage, ou
  3. accéder à un spécifiquement accordés emplacement.

Jetez un oeil à http://msdn.microsoft.com/en-us/library/windows/apps/hh464959.aspx pour avoir une idée de ce que vous serez en mesure d'accéder.

Autres conseils

À partir de http://tirania.org/blog/archive/2011/Sep-15.html :

Lorsque vous utilisez C# et VB, vous êtes à l'aide de la totalité .NET framework.Mais ils ont choisi d'exposer un plus petit sous-ensemble de l'API pour les développeurs pour pousser la nouvelle vision pour Windows 8.

Et cette nouvelle vision de la sécurité/bac à sable et de systèmes asynchrones de la programmation.C'est pourquoi vous n'obtenez pas directement accès au système de fichiers ou douille d'accès et pourquoi synchrone Api que vous aviez l'habitude de consommer ne sont pas exposés.

Maintenant, vous remarquerez que j'ai dit "exposés" et non pas "disparu".

Ce qu'ils ont fait était qu'ils ne exposés au compilateur d'un ensemble d'Api lorsque vous ciblez le Métro profil.Si votre demande ne sera pas accidentellement dossier d'appel.Créer par exemple.Au moment de l'exécution si, le CLR charge l'intégralité de la bibliothèque de classe, le très celle qui contient Fichier.Créer, de façon interne, le CLR pourrait appeler quelque chose comme Fichier.Créer, c'est juste vous qui n'y ont pas accès.

Cette répartition est similaire à ce qui a été fait dans le passé avec Silverlight, où chaque API a été exposé, et où mscorlib a été étant donné que votre demande n'a pas à s'assurer que le système de sécurité.

Vous pourriez penser que vous pouvez utiliser une astuce (qui font référence à la GAC de la bibliothèque au lieu de le compilateur de référence ou à l'aide de la réflexion pour obtenir à l'Api privées, ou P/Invoquant en Win32).Mais toutes ces utilisations d'être pris par l'AppStore examen de la demande et vous ne serez pas en mesure de publier votre application par le biais de Microsoft store.

Vous pouvez toujours faire ce vilain hack vous s'il vous plaît sur votre système.Il vient de ne sera pas possible de les publier par le biais de l'AppStore.

Donc il n'y a probablement pas de manière officielle, et si il y a une façon officieuse, il ne sera probablement pas acceptée sur l'app store.

En général, cela a un sens:Je ne veux pas de télécharger une apparence légitime demande juste de l'avoir scan de mon disque dur et de trouver ma "budget.xls" feuille de calcul qui comprend mes services bancaires/de crédit.

EDIT:il est possible d'accorder un accès temporaire pour sécuriser les fichiers/dossiers par le biais de WinRT du sélecteur de fichiers, mais il doit être appelé et choisi explicitement par l'utilisateur.

Vous pouvez utiliser l' StorageFolder.GetFolderFromPathAsync Méthode pour obtenir un StorageFolder exemple à partir d'un chemin.

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

Notez que vous ne pouvez pas avoir la permission de le faire pour tous les chemins sur votre machine si.

Situation similaire.Voulais accès chrome signets fichiers à analyser.A utiliser FileOpenPicker au départ, mais le fichier qu'il renvoie peut-être "en cache" dans le futureaccesslist(?) pour la récupération ultérieure.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top