Compartilhar via


Acessar arquivos e pastas com o SDK do Aplicativo Windows e .NET

Este artigo mostra como acessar arquivos e pastas usando APIs do .NET em aplicativos WinUI empacotados. Você aprenderá a ler e gravar arquivos, gerenciar diretórios e unidades e trabalhar com fluxos de memória para codificação e decodificação de cadeia de caracteres.

Os aplicativos WinUI podem usar APIs .NET ao lado de APIs WinRT e Win32 para fornecer acesso abrangente ao sistema de arquivos. Os exemplos neste artigo se concentram no namespace System.IO , que fornece a funcionalidade principal para operações de arquivo e diretório.

Pré-requisitos

  • Visual Studio 2022 com a carga de trabalho de desenvolvimento de aplicativos WinUI instalada
  • Um projeto de WinUI empacotado
  • Familiaridade básica com o desenvolvimento em C# e .NET

O que você aprenderá

Neste artigo, você aprenderá a:

Ler e gravar arquivos com APIs do .NET

No exemplo a seguir, ReadWriteFiles cria um novo arquivo, grava um conjunto de inteiros no arquivo e lê os inteiros de volta do arquivo. O exemplo usa a classe FileStream para criar um novo arquivo e abrir o arquivo para leitura ou gravação. O exemplo usa a classe BinaryWriter para gravar os inteiros no arquivo e na classe BinaryReader para ler os inteiros do arquivo.

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());
        }
    }
}

Gerenciar unidades e pastas no .NET

O exemplo a seguir mostra como usar as classes DirectoryInfo e Directory para criar, excluir e gerenciar pastas. O exemplo usa a DirectoryInfo classe para criar um novo diretório, criar um subdiretório e excluir o diretório. A DirectoryInfo classe fornece métodos para criar, mover e enumerar por meio de diretórios e subdiretórios. A Directory classe fornece métodos estáticos para criar, mover e enumerar por meio de diretórios e subdiretórios.

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());
    }
}

Este exemplo usa o método estático GetDrives para recuperar informações sobre todas as unidades no sistema. A classe DriveInfo fornece informações sobre uma unidade, como o tipo de unidade, o rótulo, o sistema de arquivos e o espaço livre disponível.

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 ");
        }
    }
}

Codificar e decodificar cadeias de caracteres com MemoryStream

Este exemplo mostra como usar a classe MemoryStream para codificar e decodificar dados de cadeia de caracteres. Primeiro, ele cria uma MemoryStream para gravar uma string de forma assíncrona em um fluxo de memória e, em seguida, lê a string do fluxo de memória. A classe de codificação é usada para converter a cadeia de caracteres em uma matriz de bytes e, em seguida, gravar a matriz de bytes no fluxo de memória. Um StreamReader é então usado para ler assíncronamente a matriz de bytes do fluxo de memória e em seguida converter a matriz de bytes de volta em uma cadeia de caracteres chamando 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);
}

Observação

Para obter informações sobre como converter entre fluxos do .NET e fluxos do WinRT, consulte Como converter entre fluxos do .NET e do Windows Runtime.

Consulte também

Acessar arquivos e pastas com o SDK do Windows App e APIs do WinRT

Arquivos, pastas e bibliotecas com o SDK do Aplicativo do Windows