none
Récupérer des fichier sur une clé USB [Winrt] RRS feed

  • 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 =)

    lundi 19 octobre 2015 15:58

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

    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,
    Teodora


    Votez! 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.

    mercredi 28 octobre 2015 08:41
    Modérateur
  • 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

    mercredi 28 octobre 2015 10:39