Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este artigo mostra como acessar arquivos e pastas usando APIs .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 cadeias de caracteres.
Os aplicativos WinUI podem usar APIs .NET ao lado das 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 o workload de desenvolvimento de aplicações WinUI instalado
- Um projeto WinUI empacotado
- Familiaridade básica com desenvolvimento em C# e .NET
O que você vai aprender
Neste artigo, vai aprender a:
- Ler e gravar arquivos usando FileStream, BinaryWriter e BinaryReader
- Criar, excluir e gerenciar diretórios com DirectoryInfo e classes Directory
- Recuperar informações da unidade usando DriveInfo
- Codifique e decodifice cadeias de caracteres com MemoryStream e StreamReader
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, em seguida, 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 a 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 através de diretórios e subdiretórios. A classe Directory fornece métodos de estáticos para criar, mover e enumerar através 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, rótulo, sistema de arquivos e 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 ");
}
}
}
Codifique e decodifice cadeias de caracteres com MemoryStream
Este exemplo mostra como usar a classe MemoryStream para codificar e decodificar dados de cadeia de caracteres. Primeiro, cria um MemoryStream para gravar uma string de forma assíncrona num fluxo de memória e, em seguida, lê a string do fluxo de memória. A classe Encoding é 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 de forma assíncrona a matriz de bytes do fluxo de memória e depois converter a matriz de bytes novamente para uma string 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 .NET e WinRT, consulte Como converter entre fluxos .NET e do Tempo de Execução do Windows.
Ver também
Acesse arquivos e pastas com o SDK do Windows App e APIs do WinRT
Ficheiros, pastas e bibliotecas com o SDK de Aplicações Windows
Windows developer