Meilleur auteur de réponses
Récupérer des fichier sur une clé USB [Winrt]

Question
-
Bonjour,
J'ai un programme qui récupère les média présent dans le dossier Image, il fait ça bien, tout mes fichiers sont récupéré,J'ai donc souhaité faire la même chose avec une clé USB , j'ai donné accès au RemovableDevices dans le manifeste, (note : j'utilise exactement les mêmes fichiers), mais il ne me trouve que 11 fichiers (en l’occurrence uniquement les .jpeg).Il doit donc y avoir une manipulation supplémentaire à effectuer seulement je ne la trouve pas =/
Voici mon code :
private async void load_Files(string filter = null) { this.imgType.Files.Clear(); this.vidType.Files.Clear(); this.docType.Files.Clear(); this.Folders.Clear(); IReadOnlyList<FileInformation> picturesInformation = await this.query_Files(KnownFolders.PicturesLibrary, this.imgTypeFilter); IReadOnlyList<FileInformation> videosInformation = await this.query_Files(KnownFolders.PicturesLibrary, this.videoTypeFilter); IReadOnlyList<FileInformation> docsInformation = await this.query_Files(KnownFolders.PicturesLibrary, this.docsTypeFilter, ThumbnailMode.SingleItem); this.transform_list_to_observable_collection(picturesInformation, this.imgType.Files, filter); this.transform_list_to_observable_collection(videosInformation, this.vidType.Files, filter); this.transform_list_to_observable_collection(docsInformation, this.docType.Files, filter); DeviceInformationCollection _deviceInfoCollection = await DeviceInformation.FindAllAsync(StorageDevice.GetDeviceSelector()); if (_deviceInfoCollection.Count > 0) { foreach (DeviceInformation deviceInfo in _deviceInfoCollection) { // Convert the selected device information element to a StorageFolder StorageFolder storage = StorageDevice.FromId(deviceInfo.Id); //this.query_Folders(storage); IReadOnlyList<FileInformation> usbPicInfo = await this.query_Files(storage, this.imgTypeFilter); // echec de l'appel de la procédure distante si portable branché IReadOnlyList<FileInformation> usbVidInfo = await this.query_Files(storage, this.videoTypeFilter); IReadOnlyList<FileInformation> usbDocInfo = await this.query_Files(storage, this.docsTypeFilter, ThumbnailMode.SingleItem); this.transform_list_to_observable_collection(usbPicInfo, this.imgType.Files, filter); this.transform_list_to_observable_collection(usbVidInfo, this.vidType.Files, filter); this.transform_list_to_observable_collection(usbDocInfo, this.docType.Files, filter); } } picturesSource.Source = this.FilesByType; foldersSource.Source = this.Folders;
Voilà voilà, si quelqu'un à une piste pour ce genre de problème je suis preneur =P
D'avance merci =)
- Modifié ThatGuyWithTheGlasses lundi 19 octobre 2015 16:03
Réponses
-
En fait c'était pour stocker tout les fichiers d'un clé usb dans le dossier temp sans intervention de l'utilisateur,
Du coup j'ai fais comme ça et ça marche pas mal, c'est juste un sample que j'ai pas ajouté à mon projet final donc la recherche dans l'arborescence est pas dispo mais le concept est là:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.InteropServices.WindowsRuntime; using Windows.Foundation; using Windows.Foundation.Collections; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Controls.Primitives; using Windows.UI.Xaml.Data; using Windows.UI.Xaml.Input; using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Navigation; using Windows.Devices.Enumeration; using Windows.Devices.Enumeration.Pnp; using System.Threading.Tasks; using System.Runtime.InteropServices; using Windows.Storage; // Pour en savoir plus sur le modèle d'élément Page vierge, consultez la page http://go.microsoft.com/fwlink/?LinkId=234238 namespace App5 { /// <summary> /// Une page vide peut être utilisée seule ou constituer une page de destination au sein d'un frame. /// </summary> public sealed partial class MainPage : Page { private List<string> IdUsbList; private List<string> FolderUsbList; public MainPage() { this.InitializeComponent(); UsbInterfaceInit(); } public void UsbInterfaceInit() { IdUsbList = new List<string>(); FolderUsbList = new List<string>(); var Interface = DeviceInformation.CreateWatcher(DeviceClass.PortableStorageDevice); Interface.Added += Interface_Added; Interface.Removed += Interface_Removed; Interface.Updated += Interface_Updated; Interface.Start(); } public async Task UpdatedContent(string id) { StorageFolder usb = Windows.Devices.Portable.StorageDevice.FromId(id); System.Diagnostics.Debug.WriteLine("On maj les fichiers de : " + usb.DisplayName); } public async Task RemoveContent(string id) { StorageFolder tmp = await ApplicationData.Current.TemporaryFolder.GetFolderAsync(FolderUsbList.ElementAt(IdUsbList.IndexOf(id))); await tmp.DeleteAsync(); System.Diagnostics.Debug.WriteLine("On supprime les fichiers de : " + FolderUsbList.ElementAt(IdUsbList.IndexOf(id))); FolderUsbList.RemoveAt(IdUsbList.IndexOf(id)); IdUsbList.Remove(id); } public async Task AddContent(string id) { StorageFolder usb = Windows.Devices.Portable.StorageDevice.FromId(id); StorageFolder tmp = await ApplicationData.Current.TemporaryFolder.CreateFolderAsync(usb.DisplayName.Replace(":", ""), CreationCollisionOption.ReplaceExisting); FolderUsbList.Add(usb.DisplayName.Replace(":", "")); IdUsbList.Add(id); IReadOnlyList<StorageFile> files = await usb.GetFilesAsync(); foreach (StorageFile file in files) { try { await file.CopyAsync(tmp, file.Name, NameCollisionOption.GenerateUniqueName); } catch (System.Exception e) { System.Diagnostics.Debug.WriteLine(e.Message); } } System.Diagnostics.Debug.WriteLine("On stocke les fichiers de : " + usb.Name); } private async void Interface_Updated(DeviceWatcher sender, DeviceInformationUpdate args) { await UpdatedContent(args.Id); System.Diagnostics.Debug.WriteLine("++"); } private async void Interface_Removed(DeviceWatcher sender, DeviceInformationUpdate args) { await RemoveContent(args.Id); System.Diagnostics.Debug.WriteLine("++"); } private async void Interface_Added(DeviceWatcher sender, DeviceInformation args) { await AddContent(args.Id); System.Diagnostics.Debug.WriteLine("Salut"); } } }
Voilà voilà =)
Merci de m'avoir répondu
- Marqué comme réponse ThatGuyWithTheGlasses mercredi 28 octobre 2015 10:39
Toutes les réponses
-
Bonjour, ThatGuyWithTheGlasses,
Je vous invite à tester de lier le openPicker.SuggestedStartLocation au clé USB, d'adapter le FileOpenPicker et
d'utiliser PickSingleFileAsync() pour acceder à file.Name (example en bas):
How to copy image from filepiker to app folder windows store apps
Je vous remercie par avance de votre retour.Cordialement,
TeodoraVotez! Appel à la contribution TechNet Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.
-
En fait c'était pour stocker tout les fichiers d'un clé usb dans le dossier temp sans intervention de l'utilisateur,
Du coup j'ai fais comme ça et ça marche pas mal, c'est juste un sample que j'ai pas ajouté à mon projet final donc la recherche dans l'arborescence est pas dispo mais le concept est là:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.InteropServices.WindowsRuntime; using Windows.Foundation; using Windows.Foundation.Collections; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Controls.Primitives; using Windows.UI.Xaml.Data; using Windows.UI.Xaml.Input; using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Navigation; using Windows.Devices.Enumeration; using Windows.Devices.Enumeration.Pnp; using System.Threading.Tasks; using System.Runtime.InteropServices; using Windows.Storage; // Pour en savoir plus sur le modèle d'élément Page vierge, consultez la page http://go.microsoft.com/fwlink/?LinkId=234238 namespace App5 { /// <summary> /// Une page vide peut être utilisée seule ou constituer une page de destination au sein d'un frame. /// </summary> public sealed partial class MainPage : Page { private List<string> IdUsbList; private List<string> FolderUsbList; public MainPage() { this.InitializeComponent(); UsbInterfaceInit(); } public void UsbInterfaceInit() { IdUsbList = new List<string>(); FolderUsbList = new List<string>(); var Interface = DeviceInformation.CreateWatcher(DeviceClass.PortableStorageDevice); Interface.Added += Interface_Added; Interface.Removed += Interface_Removed; Interface.Updated += Interface_Updated; Interface.Start(); } public async Task UpdatedContent(string id) { StorageFolder usb = Windows.Devices.Portable.StorageDevice.FromId(id); System.Diagnostics.Debug.WriteLine("On maj les fichiers de : " + usb.DisplayName); } public async Task RemoveContent(string id) { StorageFolder tmp = await ApplicationData.Current.TemporaryFolder.GetFolderAsync(FolderUsbList.ElementAt(IdUsbList.IndexOf(id))); await tmp.DeleteAsync(); System.Diagnostics.Debug.WriteLine("On supprime les fichiers de : " + FolderUsbList.ElementAt(IdUsbList.IndexOf(id))); FolderUsbList.RemoveAt(IdUsbList.IndexOf(id)); IdUsbList.Remove(id); } public async Task AddContent(string id) { StorageFolder usb = Windows.Devices.Portable.StorageDevice.FromId(id); StorageFolder tmp = await ApplicationData.Current.TemporaryFolder.CreateFolderAsync(usb.DisplayName.Replace(":", ""), CreationCollisionOption.ReplaceExisting); FolderUsbList.Add(usb.DisplayName.Replace(":", "")); IdUsbList.Add(id); IReadOnlyList<StorageFile> files = await usb.GetFilesAsync(); foreach (StorageFile file in files) { try { await file.CopyAsync(tmp, file.Name, NameCollisionOption.GenerateUniqueName); } catch (System.Exception e) { System.Diagnostics.Debug.WriteLine(e.Message); } } System.Diagnostics.Debug.WriteLine("On stocke les fichiers de : " + usb.Name); } private async void Interface_Updated(DeviceWatcher sender, DeviceInformationUpdate args) { await UpdatedContent(args.Id); System.Diagnostics.Debug.WriteLine("++"); } private async void Interface_Removed(DeviceWatcher sender, DeviceInformationUpdate args) { await RemoveContent(args.Id); System.Diagnostics.Debug.WriteLine("++"); } private async void Interface_Added(DeviceWatcher sender, DeviceInformation args) { await AddContent(args.Id); System.Diagnostics.Debug.WriteLine("Salut"); } } }
Voilà voilà =)
Merci de m'avoir répondu
- Marqué comme réponse ThatGuyWithTheGlasses mercredi 28 octobre 2015 10:39