Partager via


Accéder aux fichiers et dossiers avec le SDK d’application Windows et .NET

Les applications du SDK d’application Windows empaquetées peuvent tirer parti des API .NET pour la lecture et l’écriture de fichiers, l’utilisation de dossiers, et la lecture d’informations sur les lecteurs et les volumes. En outre, n’importe quelle application de bureau empaquetée peut utiliser les API WinRT et Win32 dans le SDK Windows, ainsi que les API fournies dans le SDK .NET. Cet article fournit des conseils sur l’utilisation des API .NET System.IO pour lire et écrire des fichiers, gérer des lecteurs et des dossiers, et utiliser des flux de mémoire pour encoder ou décoder des données de chaîne.

Lire et écrire des fichiers avec des API .NET

Dans l’exemple suivant, ReadWriteFiles crée un fichier, écrit un ensemble 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 à des fins de lecture ou d’écriture. L’exemple utilise la classe BinaryWriter pour écrire les entiers dans le fichier, et la classe BinaryReader pour lire les entiers dans le 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 classes DirectoryInfo et Directory 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 statiques pour la création, le déplacement et l’énumération dans les répertoires et les sous-répertoires. La classe Directory fournit des méthodes static pour la création, le déplacement et l’énumération dans les répertoires et les 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 GetDrives statique pour récupérer des informations concernant tous les lecteurs du système. La classe DriveInfo fournit des informations sur un lecteur, telles que 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 un MemoryStream pour écrire de manière asynchrone une chaîne dans un flux de mémoire, puis lit 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 des flux .NET et des flux WinRT, consultez Guide pratique pour effectuer une conversion entre les flux .NET et les flux Windows Runtime.

Voir aussi

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

Fichiers, dossiers et bibliothèques avec le SDK d’application Windows