Je laisse mes utilisateurs à sélectionner des fichiers à la bibliothèque de musique. Après quoi je stocke le chemin des fichiers sélectionnés localement. Maintenant, mon problème est comment puis-je avoir accès aux fichiers par programme de ces chemins? Voici quelques choses que j'ai essayées. P>
dire que mon chemin est d: \ xyz \ abc.mp3 em> p>
alternative 1: p>
// i Figure Cela ne fonctionne pas car la méthode GetFileAseync ne peut obtenir que des fichiers du dossier actuel P>
alternative 2: p>
s = attendre s.getfolderAsync ("xyz"); strong> // après lequel j'ai prévu de faire getfileasync. Mais cela donne également une erreur de dossier introuvable. P>
Et enfin j'ai essayé s = s.getfolderAsync ("d"); strong> p>
Toute aide sur la manière dont j'ai accès au fichier ou même un autre moyen d'atteindre mon objectif serait fantastique! p>
P.s: STANDSFILE.GETFILEFROMPATHASYNC ("D: \ XYZ \ ABC.MP3") dit que je n'ai pas la permission d'accéder. P>
3 Réponses :
Tout d'abord, assurez-vous de disposer des capacités appropriées. L'erreur que vous obtenez est ce que vous verriez si vous n'avez pas déclaré le bon cap_id. Voici une capture d'écran: P>
p>
En ce qui concerne les chemins de fichiers, en fonction de l'endroit où le fichier est stocké, vous devrez peut-être utiliser la double barre oblique. J'ai eu un problème similaire, j'ai résolu en utilisant l'approche suivante: p>
"ISOSTORE: partagé \\ foldername \\ nomoffile.mp3" p> blockQuote>
Vous pouvez voir tout le processus dans mon point de vue ici . p>
C'est une application WP 8.1 et la capacité de la bibliothèque de musique cochée. J'en récupérant tous les fichiers de la bibliothèque et laissez les utilisateurs les sélectionner. Ensuite, je stocke les chemins de fichiers, jusqu'à ce que c'est bien. Maintenant, je veux accéder à ces fichiers plus tard dans mon application. Et oui double slabed, toujours pareil.
(Réponse de la reconstruction pour être plus clair)
Si vous aviez déclaré dans Ensuite, vous pourrez récupérer des fichiers de package.appxMeest code> Fichier: p>
bibliothèque musicale code> capacité dans capacités em> li>
Association de type de fichier code> dans déclarations em> (Je ne sais pas si cela est nécessaire si vous n'accédez que si vous n'acceptez que la bibliothèque musicale) li>
ul>
Music Library CODE> Dossier comme suit: P>
StorageFolder externalDevices = Windows.Storage.KnownFolders.RemovableDevices;
StorageFolder sdCard = (await externalDevices.GetFoldersAsync()).FirstOrDefault();
StorageFile file = await sdCard.GetFileAsync("xyz.mp3"); // for D:\xyz.mp3
StorageFile file = await sdCard.GetFileAsync("XYZ\xyz.mp3"); // for D:\XYZ\xyz.mp3
La capacité de bibliothèque musicale a coché. J'en récupérant tous les fichiers de la bibliothèque et laissez les utilisateurs les sélectionner. Ensuite, je stocke les chemins de fichiers, jusqu'à ce que c'est bien. Maintenant, je veux accéder à ces fichiers plus tard dans mon application. Et comme je l'ai dit fichier stockagefile = attendre dossier.getfileasync ("nom_fichement.mp3"); ne marche pas. Et je suis convaincu qu'un tel fichier existe dans la bibliothèque cause que j'ai récupéré le nom des objets de stockageFile mon utilisateur sélectionné. Un moyen simple serait de faire getfileSasync (requête) à chaque fois et de rechercher mon fichier dans le résultat. Mais cela conduirait à une œuvre terrible.
@Aditya Je pense que vous ne devriez pas utiliser chemin code>, mais
nom code> et dossier parent. Regardez ce
StorageFolder Dossier = CadreFolders.MusicLibrary Code> Vous donne accès à la bibliothèque de musique - vous devriez getfiles par rapport à celui-ci. Je ne sais pas si vous vous souvenez de la route ou du nom est un bon moyen - regardez que la musique libellée peut être sur la carte SD et dans la mémoire des téléphones, l'utilisateur peut changer de fichiers entre eux. Vous devez également vérifier si l'utilisateur n'avait pas supprimé de fichier.
Ont essayé d'utiliser le nom aussi, ne fonctionne pas. Et aucune de la suppression, la situation de déménagement ne se passe-t-elle parce que je le fais dans mon téléphone / émulateur.
@Aditya j'ai essayé ceci sur un appareil et cela devrait fonctionner. Je n'ai pas compris - testez-vous sur l'émulateur ou l'appareil?
Fait les deux. Même erreur. Et pouvez-vous élaborer ce qui a fonctionné dans votre cas?
@Aditya j'ai modifié la réponse et j'ai ajouté le code que j'ai vérifié - ça marche. Avez-vous ajouté une association de type de fichier dans des déclarations? Et utilisez-vous Win8.1 RT ou Silverlight?
Pouvez-vous me dire comment votre chemin pour l'article [1]?
Laissez-nous Continuer cette discussion en chat
Dans mon cas, j'ai dû ajouter une capacité "stockage amovible" également (en plus de la bibliothèque de musique). Après cela, ça commence à travailler.
@Illidan Si vous souhaitez accéder aux fichiers sur des cartes SD - Oui, vous devez ajouter cette capacité. Cela dépend du chemin du fichier que vous souhaitez accéder.
@ Romasz Tout ce que je voulais, c'est accéder à un dossier connecté. MusicLibrary Dossier. Jusqu'à ce que je déclare un "stockage amovible", j'ai eu accès refusé. Après avoir déclaré - ça a commencé à travailler
@Illidan Il pourrait y avoir une telle possibilité que la bibliothèque musicale est un emplacement virtuel et existe en fait sur la carte téléphonique et SD. Je n'ai pas vérifié si l'accès à un fichier unique en musique sur SD via MusicLibrary nécessite une capacité amovible. Merci pour la remarque.
@ROMASZ: Je voulais savoir comment mettez-vous la mise à jour de la liste lorsque l'utilisateur modifie le contenu de son musiclibrary. Vérifiez-vous chaque fois que l'application s'ouvre en faisant la cause persistante des données qui prend beaucoup de temps ou essayez-vous de le faire à l'arrière-plan?
@Absolutursith pour l'instant, je n'ai pas un tel besoin. Il n'y a pas d'événement disponible qui vous aiderait. Je pense que le mieux serait de fournir à l'utilisateur un bouton de «synchroniser» ou de le faire en arrière-plan avec un indicateur d'exécution, informant l'utilisateur que quelque chose se passe.
@ROMASZ: Merci pour l'aide, je vais vérifier.
Vous voudrez utiliser le Accès au cache pour stocker l'accès aux fichiers au lieu des chemins. Cela vous permettra de récupérer des objets de stockage à utiliser avec tout de suite et vous aidera à déplacer certains scénarios entourant des fichiers.
Pour stocker un fichier dans le cache d'accès p> vous sauvegardez le jeton certains où. Pour récupérer le fichier du cache: p> stocker uniquement sur le chemin vous ouvre jusqu'à des problèmes avec la modification des lettres de lecteur. Cela garantit que si le fichier est toujours disponible, votre application peut l'obtenir. P> p>
GetFileFROMPATHASYNC ne garantit pas de maintenir l'accès aux fichiers d'un sélecteur sur Windows Phone 8.1. L'accès refusé est le résultat attendu. Pour maintenir l'accès, vous devrez utiliser l'espace de noms Windows.Storage.AccessCache. Voir ma réponse pour une façon de maintenir l'accès à un fichier.