Partager via


Accéder aux fichiers et dossiers avec le Kit de développement logiciel (SDK) d’application Windows et .NET

Cet article explique comment accéder aux fichiers et dossiers à l’aide d’API .NET dans des applications WinUI empaquetées. Vous allez apprendre à lire et écrire des fichiers, à gérer des répertoires et des lecteurs, et à utiliser des flux de mémoire pour l’encodage et le décodage de chaînes.

Les applications WinUI peuvent utiliser des API .NET avec des API WinRT et Win32 pour fournir un accès complet au système de fichiers. Les exemples de cet article se concentrent sur l’espace de noms System.IO , qui fournit les fonctionnalités principales des opérations de fichier et de répertoire.

Prerequisites

  • Visual Studio 2022 avec la charge de travail de développement d’applications WinUI installée
  • Un projet WinUI empaqueté
  • Connaissance de base du développement C# et .NET

Ce que vous allez découvrir

Dans cet article, vous allez apprendre à :

Lire et écrire des fichiers avec des API .NET

Dans l’exemple suivant, ReadWriteFiles crée un fichier, écrit un jeu d’entiers dans le fichier, puis lit les entiers à partir du fichier. L’exemple utilise la classe FileStream pour créer un fichier et ouvrir le fichier pour la lecture ou l’écriture. L’exemple utilise la classe BinaryWriter pour écrire les entiers dans le fichier et la classe BinaryReader pour lire les entiers du fichier.

using System.IO;
...
ReadWriteFiles("test.bin");
...
private void ReadWriteFiles(string fileName)
{
    if (File.Exists(fileName))
    {
        Console.WriteLine($"{fileName} already exists!");
        return;
    }

    using (FileStream fs = new(fileName, FileMode.CreateNew))
    {
        using BinaryWriter writer = new(fs);
        for (int i = 0; i < 11; i++)
        {
            writer.Write(i);
        }
    }

    using (FileStream fs = new(fileName, FileMode.Open, FileAccess.Read))
    {
        using BinaryReader reader = new(fs);
        for (int i = 0; i < 11; i++)
        {
            Console.WriteLine(reader.ReadInt32());
        }
    }
}

Gérer les lecteurs et les dossiers dans .NET

L’exemple suivant montre comment utiliser les DirectoryInfo et classes d’annuaire pour créer, supprimer et gérer des dossiers. L’exemple utilise la classe DirectoryInfo pour créer un répertoire, créer un sous-répertoire et supprimer le répertoire. La classe DirectoryInfo fournit des méthodes pour créer, déplacer et énumérer via des répertoires et des sous-répertoires. La classe Directory fournit méthodes de statiques pour la création, le déplacement et l’énumération via des répertoires et des sous-répertoires.

using System.IO;
...
private void FolderTest()
{
    FolderManagement(@"c:\MyDir", "Projects");
}
private void FolderManagement(string path, string subfolderName)
{
    DirectoryInfo di = new(path);
    try
    {
        // Create directory if it doesn't exist
        if (di.Exists)
        {
            Console.WriteLine("Path already exists.");
        }
        else
        {
            di.Create();
            Console.WriteLine("The directory was created successfully.");
        }

        // Create subdirectory if it doesn't exist
        string subfolderPath = Path.Combine(path, subfolderName);
        if (Directory.Exists(subfolderPath))
        {
            Console.WriteLine("Subfolder path already exists.");
        }
        else
        {
            di.CreateSubdirectory(subfolderName);
            Console.WriteLine("The subdirectory was created successfully.");
        }

        // Delete directory
        di.Delete(true);
        Console.WriteLine("The directory was deleted successfully.");
    }
    catch (Exception ex)
    {
        Console.WriteLine("The process failed: {0}", ex.ToString());
    }
}

Cet exemple utilise la méthode statique GetDrives pour récupérer des informations sur tous les lecteurs du système. La classe DriveInfo fournit des informations sur un lecteur, comme le type de lecteur, l’étiquette, le système de fichiers et l’espace libre disponible.

using System.IO;
...
private void DriveManagement()
{
    DriveInfo[] drives = DriveInfo.GetDrives();

    foreach (DriveInfo d in drives)
    {
        Console.WriteLine($"Drive name: {d.Name}");
        Console.WriteLine($"  Drive type: {d.DriveType}");
        if (d.IsReady)
        {
            Console.WriteLine($"  Volume label: {d.VolumeLabel}");
            Console.WriteLine($"  File system type: {d.DriveFormat}");
            Console.WriteLine($"  Space available to user: {d.AvailableFreeSpace, 15} bytes");
            Console.WriteLine($"  Total available space: {d.TotalFreeSpace, 15} bytes");
            Console.WriteLine($"  Total size of drive: {d.TotalSize, 15} bytes ");
        }
    }
}

Encoder et décoder des chaînes avec MemoryStream

Cet exemple montre comment utiliser la classe MemoryStream pour encoder et décoder des données de chaîne. Il crée d’abord une MemoryStream pour écrire de manière asynchrone une chaîne dans un flux de mémoire, puis lire la chaîne à partir du flux de mémoire. La classe Encoding est utilisée pour convertir la chaîne en tableau d’octets, puis écrire le tableau d’octets dans le flux de mémoire. Un StreamReader est ensuite utilisé pour lire de manière asynchrone le tableau d’octets à partir du flux de mémoire, puis convertir le tableau d’octets en chaîne en appelant ReadToEndAsync.

using System.IO;
using System.Text;
...
private async Task EncodeDecodeStringAsync(string inputData)
{
    using MemoryStream stream = new();
    var inputBytes = Encoding.UTF8.GetBytes(inputData);
    await stream.WriteAsync(inputBytes, 0, inputBytes.Length);
    stream.Seek(0, SeekOrigin.Begin);

    using StreamReader reader = new(stream);
    string text = await reader.ReadToEndAsync();
    Console.WriteLine(text);
}

Remarque

Pour plus d’informations sur la conversion entre les flux .NET et les flux WinRT, consultez Comment : convertir entre les flux .NET et Windows Runtime.

Voir aussi

Accéder aux fichiers et dossiers avec le SDK d’applications Windows et les API WinRT

Fichiers, dossiers et bibliothèques avec le Kit de développement logiciel (SDK) d’application Windows