Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se muestra cómo acceder a archivos y carpetas mediante las API de .NET en aplicaciones WinUI empaquetadas. Aprenderá a leer y escribir archivos, administrar directorios y unidades, y trabajar con flujos de memoria para codificación y descodificación de cadenas.
Las aplicaciones winUI pueden usar API de .NET junto con las API de WinRT y Win32 para proporcionar acceso completo al sistema de archivos. Los ejemplos de este artículo se centran en el espacio de nombres System.IO , que proporciona la funcionalidad básica para las operaciones de archivos y directorios.
Prerrequisitos
- Visual Studio 2022 con la carga de trabajo desarrollo de aplicaciones WinUI instalada
- Un proyecto de WinUI empaquetado
- Conocimientos básicos sobre el desarrollo de C# y .NET
Qué aprenderá:
En este artículo, aprenderá a:
- Leer y escribir archivos mediante FileStream, BinaryWriter y BinaryReader
- Creación, eliminación y administración de directorios con clases DirectoryInfo y Directory
- Recuperación de la información del disco usando DriveInfo
- Codificación y descodificación de cadenas con MemoryStream y StreamReader
Leer y escribir archivos con las API de .NET
En el ejemplo siguiente, crea un nuevo archivo, escribe un conjunto de enteros en el archivo y, a continuación, ReadWriteFiles lee los enteros del archivo. En el ejemplo se usa la clase FileStream para crear un nuevo archivo y para abrir el archivo para leer o escribir. En el ejemplo se usa la clase BinaryWriter para escribir los enteros en el archivo y la clase BinaryReader para leer los enteros del archivo.
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());
}
}
}
Administración de unidades y carpetas en .NET
En el ejemplo siguiente se muestra cómo usar las clases DirectoryInfo y Directory para crear, eliminar y administrar carpetas. En el ejemplo se usa la DirectoryInfo clase para crear un directorio, crear un subdirectorio y eliminar el directorio. La DirectoryInfo clase proporciona métodos para crear, mover y enumerar a través de directorios y subdirectorios. La clase Directory proporciona métodos de estáticos para crear, mover y enumerar a través de directorios y subdirectorios.
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());
}
}
En este ejemplo se usa el método Estático GetDrives para recuperar información sobre todas las unidades del sistema. La clase DriveInfo proporciona información sobre una unidad, como el tipo de unidad, la etiqueta, el sistema de archivos y el espacio 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 ");
}
}
}
Codificación y descodificación de cadenas con MemoryStream
En este ejemplo se muestra cómo usar la clase MemoryStream para codificar y descodificar datos de cadena. Primero crea un MemoryStream para escribir de forma asincrónica una cadena en una secuencia de memoria y luego leer la cadena desde esa secuencia de memoria. La clase Encoding se utiliza para convertir la cadena en una matriz de bytes y luego escribir la matriz de bytes en el flujo de memoria. Un StreamReader se usa para leer asincrónicamente la matriz de bytes de la secuencia de memoria y luego convertir la matriz de bytes en una cadena mediante la llamada a 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);
}
Nota:
Para obtener información sobre la conversión entre secuencias de .NET y flujos de WinRT, vea How to: Convert between .NET and Windows Runtime streams (Cómo: Convertir entre secuencias de .NET y Windows Runtime).
Consulte también
Acceso a archivos y carpetas con el SDK de aplicaciones de Windows y las API de WinRT