Accéder aux fichiers et dossiers dynamiquement

WindowsStoreHeader
Accéder aux fichiers et dossiers dynamiquement stockés dans les librairies utilisateurs, les périphériques amovibles, le groupe résidentiel et les périphériques de serveur multimédia

Le développeur peut avoir besoin d’accéder et manipuler dynamiquement des fichiers et répertoires qui se situent dans les librairies utilisateurs (Musique, Images et Vidéos), devices et réseaux.

Avant d’implémenter les lignes de codes qui permettront d’effectuer ces manipulations, le manifest de  l’application Windows Store doit être configuré pour pouvoir accéder aux emplacements cités en amont.

Pour ce faire, accéder à l’onglet Capabilities du fichier Package.appxmanifest  du projet Windows Store App  et cocher Music Library, Pictures Library et Videos Library.

Le manifest peut également s’afficher en « vue code » sous forme d’un fichier XML en appuyant sur la touche F7 du clavier. La combinaison des touches «Shift + F7 » permet de revenir vers la « vue design ».

Après avoir choisi les Capabilities, utiliser la classe StorageFolder pour manipuler les dossiers ou StorageFile pour les fichiers. Ces classes possèdent plusieurs méthodes.

Nous notons par exemple pour la classe StorageFolder :

  • GetFilesAsync(): Récupère l’ensemble des fichiers présent dans un répertoire.
  • GetFoldersAsync() : Récupère l’ensemble des dossiers d’un répertoire.
  • GetItemsAsync() : Récupère la liste des fichiers et dossiers d’un répertoire.
  • CreateFileAsync(): Permet de créer un fichier.
  • CreateFolderAsync(): Permet de créer un dossier.

Voici un exemple de code qui permet de récupérer  l’ensemble des fichiers  et répertoires du dossier Mes images :

Code XAML :

<Pagex:Class= »DossiersFichiersExemples.MainPage »xmlns= »http://schemas.microsoft.com/winfx/2006/xaml/presentation &raquo;
xmlns:x= »http://schemas.microsoft.com/winfx/2006/xaml &raquo;
xmlns:local= »using:DossiersFichiersExemples »
xmlns:d= »http://schemas.microsoft.com/expression/blend/2008&Prime;
xmlns:mc= »http://schemas.openxmlformats.org/markup-compatibility/2006&Prime;
mc:Ignorable= »d » RequestedTheme= »Light »>
<Page.Resources>
<CollectionViewSource x:Name= »cvsListeDesDossiers » />
<CollectionViewSource x:Name= »cvsListeDesFichiers » />
</Page.Resources>
<Grid Background= »{ThemeResource ApplicationPageBackgroundThemeBrush} »>
<Grid.RowDefinitions>
<RowDefinition Height= »120″/>
<RowDefinition />
</Grid.RowDefinitions>
<StackPanel  HorizontalAlignment= »Center » VerticalAlignment= »Center » Orientation= »Horizontal »>
<Button Content= »Accéder aux dossiers »  Tapped= »AccesAuxDossiers_Tapped »  HorizontalAlignment= »Center »/>
<Button Content= »Accéder aux fichiers »  Tapped= »AccesAuxFichiers_Tapped »  HorizontalAlignment= »Center »/>
</StackPanel>
<StackPanel Orientation= »Horizontal » Grid.Row= »1″>
<GridView  VerticalAlignment= »Top » HorizontalAlignment= »Center » Width= »auto » ItemsSource= »{Binding Source={StaticResource cvsListeDesDossiers}} » >
<GridView.ItemTemplate>
<DataTemplate>
<StackPanel Height= »40″ Width= »320″ Background= »#3B5998″>
<TextBlock Text= »{Binding } » HorizontalAlignment= »Center »  Foreground= »White »/>
</StackPanel>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
<GridView VerticalAlignment= »Top » HorizontalAlignment= »Center » Width= »auto » ItemsSource= »{Binding Source={StaticResource cvsListeDesFichiers}} » >
<GridView.ItemTemplate>
<DataTemplate>
<StackPanel Height= »40″ Width= »320″ Background= »Green »>
<TextBlock Text= »{Binding} » HorizontalAlignment= »Center »  Foreground= »White »/>
</StackPanel>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
</StackPanel>
</Grid>
</Page>

Code C# :

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.Storage;
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;
// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238
namespace DossiersFichiersExemples
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }
        //Permet de spécifier le répertoire qui sera utilisé : Mes Images
        StorageFolder dossierMesImages = KnownFolders.PicturesLibrary;
        private async void AccesAuxDossiers_Tapped(object sender, TappedRoutedEventArgs e)
        {
            //Récupère l’ensemble des dossiers du répertoire Mes Images
            IReadOnlyList<StorageFolder> dossiersList = await dossierMesImages.GetFoldersAsync();
            List<String> dossiers = new List<String>();
            foreach(StorageFolder dossier in dossiersList)
            {
                dossiers.Add(dossier.Name);
            }
            //Alimente la source de données de la grille « Liste des dossiers »
            cvsListeDesDossiers.Source = dossiers;
        }
        private async void AccesAuxFichiers_Tapped(object sender, TappedRoutedEventArgs e)
        {
           //Récupère l’ensemble des fichiers du répertoire Mes Images
            IReadOnlyList<StorageFile> fichiersList = await dossierMesImages.GetFilesAsync();
            List<String> fichiers = new List<String>();
            foreach (StorageFile fichier in fichiersList)
            {
                fichiers.Add(fichier.Name);
            }
            //Alimente la source de données de la grille « Liste des fichiers »
            cvsListeDesFichiers.Source = fichiers;
        }
    }
}

La classe KnownFolders permet d’accéder aux librairies utilisateurs (Musique, Photos et vidéos), les périphériques amovibles, le groupe résidentiel et les périphériques de serveur multimédia.

Accéder aux fichiers et dossiers dynamiquement stockés dans n’importe quel emplacement du PC ou de la tablette.

L’une des problématiques que nous pouvons rencontrer est d’accéder dynamiquement à un fichier ou dossier qui se situe dans n’importe quel emplacement du PC ou de la tablette sans utiliser un picker.

Par exemple accéder au dossier : C:\Users\Public\DocumentationGenerale

En effet, une application Windows Store est de type sandboxe. Accéder à ce genre d’emplacement sans utiliser un picker n’est pas possible.

Si un client, vous fait cette demande dites lui que ce n’est pas possible car vous aurez toujours une erreur liée à un accès non autorisé.

Mais que faire alors?????!!!! 🙂

Je travaille actuellement sur le développement d’une application Windows Store dans laquelle le client souhaite que les utilisateurs puissent télécharger et manipuler toute la documentation (ensemble de fichiers pdf) dans le répertoire C:\Users\Public\DocumentationGenerale de la tablette en faisant appel à un WebService.

La solution que j’ai trouvé est de mettre en place une phase de paramétrage de l’application.

Cette étape ne se déroule qu’au premier démarrage de l’application. Elle permet à l’utilisateur de sélectionner le répertoire C:\Users\Public\DocumentationGenerale au premier démarrage de l’application en utilisant un picker et lors des prochains démarrages, la valeur récupérée lors de la sélection du dossier est exploitée.

<< Utilisation des pickers pour accéder à un fichier ou un dossier  Créer un contrôle personnalisé dans une application Windows Store >>

Un commentaire sur “Accéder aux fichiers et dossiers dynamiquement

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s