Développement Windows10 - Gestion de fichiers
Dans toute application, l'un des éléments les plus importants est les données. Si vous êtes.net développeur, vous connaissez peut-être le stockage isolé et le même concept suit les applications de la plateforme Windows universelle (UWP).
Emplacements des fichiers
Ce sont les zones où votre application peut accéder aux données. L'application contient une zone, qui est privée pour cette application particulière et qui est inaccessible aux autres, mais il existe de nombreuses autres zones, où vous pouvez stocker et enregistrer vos données dans un fichier.
Vous trouverez ci-dessous les brèves descriptions de chaque dossier.
S.No. | Dossier et description |
---|---|
1 | App package folder Le gestionnaire de packages installe tous les fichiers associés de l'application dans le dossier du package d'application, et l'application ne peut lire que les données de ce dossier. |
2 | Local folder Les applications stockent les données locales dans un dossier local. Il peut stocker des données jusqu'à la limite du périphérique de stockage. |
3 | Roaming folder Les paramètres et les propriétés liés à l'application sont stockés dans un dossier itinérant. D'autres appareils peuvent également accéder aux données de ce dossier. Il a une taille limitée jusqu'à 100 Ko par application. |
4 | Temp Folder Utilisation du stockage temporaire et il n'y a aucune garantie qu'il sera toujours disponible lorsque votre application s'exécutera à nouveau. |
5 | Publisher Share Stockage partagé pour toutes les applications du même éditeur. Il est déclaré dans le manifeste de l'application. |
6 | Credential Locker Utilisé pour le stockage sécurisé des objets d'identification de mot de passe. |
sept | OneDrive OneDrive est un stockage en ligne gratuit fourni avec votre compte Microsoft. |
8 | Cloud Stockez des données sur le cloud. |
9 | Known folders Ces dossiers sont déjà connus, tels que Mes images, Vidéos et Musique. |
dix | Removable storage Périphérique de stockage USB ou disque dur externe, etc. |
API de gestion de fichiers
Dans Windows 8, de nouvelles API ont été introduites pour la gestion des fichiers. Ces API sont situées dans leWindows.Storage et Windows.Storage.Streamsespaces de noms. Vous pouvez utiliser ces API à la place duSystem.IO.IsolatedStorageespace de noms. En utilisant ces API, il sera plus facile de porter votre application Windows Phone vers le Windows Store et vous pourrez facilement mettre à niveau vos applications vers les futures versions de Windows.
Pour accéder aux dossiers locaux, itinérants ou temporaires, vous devez appeler ces API -
StorageFolder localFolder = ApplicationData.Current.LocalFolder;
StorageFolder roamingFolder = ApplicationData.Current.RoamingFolder;
StorageFolder tempFolder = ApplicationData.Current.TemporaryFolder;
Pour créer un nouveau fichier dans un dossier local, utilisez le code suivant -
StorageFolder localFolder = ApplicationData.Current.LocalFolder;
StorageFile textFile = await localFolder.CreateFileAsync(filename,
CreationCollisionOption.ReplaceExisting);
Voici le code pour ouvrir le fichier nouvellement créé et écrire du contenu dans ce fichier.
using (IRandomAccessStream textStream = await textFile.OpenAsync(FileAccessMode.ReadWrite)) {
using (DataWriter textWriter = new DataWriter(textStream)){
textWriter.WriteString(contents);
await textWriter.StoreAsync();
}
}
Vous pouvez ouvrir à nouveau le même fichier, à partir du dossier local comme indiqué dans le code ci-dessous.
using (IRandomAccessStream textStream = await textFile.OpenReadAsync()) {
using (DataReader textReader = new DataReader(textStream)){
uint textLength = (uint)textStream.Size;
await textReader.LoadAsync(textLength);
contents = textReader.ReadString(textLength);
}
}
Pour comprendre comment fonctionne la lecture et l'écriture des données, jetons un coup d'œil à un exemple simple. Vous trouverez ci-dessous le code XAML dans lequel différents contrôles sont ajoutés.
<Page
x:Class = "UWPFileHandling.MainPage"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local = "using:UWPFileHandling"
xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable = "d">
<Grid Background = "{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Button x:Name = "readFile" Content = "Read Data From File"
HorizontalAlignment = "Left" Margin = "62,518,0,0"
VerticalAlignment = "Top" Height = "37" Width = "174"
Click = "readFile_Click"/>
<TextBox x:FieldModifier = "public" x:Name = "textBox"
HorizontalAlignment = "Left" Margin = "58,145,0,0" TextWrapping = "Wrap"
VerticalAlignment = "Top" Height = "276" Width = "245"/>.
<Button x:Name = "writeFile" Content = "Write Data to File"
HorizontalAlignment = "Left" Margin = "64,459,0,0"
VerticalAlignment = "Top" Click = "writeFile_Click"/>
<TextBlock x:Name = "textBlock" HorizontalAlignment = "Left"
Margin = "386,149,0,0" TextWrapping = "Wrap"
VerticalAlignment = "Top" Height = "266" Width = "250"
Foreground = "#FF6231CD"/>
</Grid>
</Page>
Vous trouverez ci-dessous l'implémentation C # pour différents événements ainsi que l'implémentation du FileHelper classe pour lire et écrire des données dans le fichier texte.
using System;
using System.IO;
using System.Threading.Tasks;
using Windows.Storage;
using Windows.Storage.Streams;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
// The Blank Page item template is documented at
http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
namespace UWPFileHandling {
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public partial class MainPage : Page {
const string TEXT_FILE_NAME = "SampleTextFile.txt";
public MainPage(){
this.InitializeComponent();
}
private async void readFile_Click(object sender, RoutedEventArgs e) {
string str = await FileHelper.ReadTextFile(TEXT_FILE_NAME);
textBlock.Text = str;
}
private async void writeFile_Click(object sender, RoutedEventArgs e) {
string textFilePath = await FileHelper.WriteTextFile(TEXT_FILE_NAME, textBox.Text);
}
}
public static class FileHelper {
// Write a text file to the app's local folder.
public static async Task<string>
WriteTextFile(string filename, string contents) {
StorageFolder localFolder = ApplicationData.Current.LocalFolder;
StorageFile textFile = await localFolder.CreateFileAsync(filename,
CreationCollisionOption.ReplaceExisting);
using (IRandomAccessStream textStream = await
textFile.OpenAsync(FileAccessMode.ReadWrite)){
using (DataWriter textWriter = new DataWriter(textStream)){
textWriter.WriteString(contents);
await textWriter.StoreAsync();
}
}
return textFile.Path;
}
// Read the contents of a text file from the app's local folder.
public static async Task<string> ReadTextFile(string filename) {
string contents;
StorageFolder localFolder = ApplicationData.Current.LocalFolder;
StorageFile textFile = await localFolder.GetFileAsync(filename);
using (IRandomAccessStream textStream = await textFile.OpenReadAsync()){
using (DataReader textReader = new DataReader(textStream)){
uint textLength = (uint)textStream.Size;
await textReader.LoadAsync(textLength);
contents = textReader.ReadString(textLength);
}
}
return contents;
}
}
}
Lorsque le code ci-dessus est compilé et exécuté, vous verrez la fenêtre suivante.
Maintenant, vous écrivez quelque chose dans la zone de texte et cliquez sur “Write Data to File”bouton. Le programme écrira les données dans le fichier texte dans un dossier local. Si vous cliquez sur“Read Data from File” , le programme lira les données à partir du même fichier texte, qui se trouve dans le dossier local et l'affichera sur le bloc de texte.