Compartir a través de


Acceso a archivos y carpetas con el SDK de Aplicaciones para Windows y .NET

Las aplicaciones de SDK de Aplicaciones para Windows empaquetadas pueden aprovechar las API de .NET para leer y escribir archivos, trabajar con carpetas y leer información de unidad y volumen. Además, cualquier aplicación de escritorio empaquetada puede usar las API de WinRT y Win32 en Windows SDK, así como las API proporcionadas en el SDK de .NET. En este artículo se proporcionan instrucciones sobre cómo usar las API System.IO de .NET para leer y escribir archivos, administrar unidades y carpetas y trabajar con flujos de memoria para codificar o descodificar datos de cadena.

Lectura y escritura de archivos con las API de .NET

En el ejemplo siguiente, ReadWriteFiles crea un nuevo archivo, escribe un conjunto de enteros en el archivo y, a continuación, lee los enteros del archivo. En el ejemplo se usa la clase FileStream para crear un nuevo archivo y abrirlo 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 clase DirectoryInfo para crear un directorio, crear un subdirectorio y eliminar el directorio. La clase DirectoryInfo proporciona métodos para crear, mover y enumerar directorios y subdirectorios. La clase Directory proporciona métodos estáticos para crear, mover y enumerar 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 objeto MemoryStream para escribir de forma asincrónica una cadena en un flujo de memoria y, a continuación, leer la cadena del flujo de memoria. La clase Encoding se usa para convertir la cadena en una matriz de bytes y, a continuación, escribir la matriz de bytes en el flujo de memoria. A continuación, se usa StreamReader para leer de forma asincrónica la matriz de bytes del flujo de memoria y, a continuación, convertir la matriz de bytes en una cadena llamando 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 flujos de .NET y de WinRT, consulte Convertir entre flujos .NET y flujos Windows Runtime.

Consulte también

Acceso a archivos y carpetas con SDK de Aplicaciones para Windows y API de WinRT

Archivos, carpetas y bibliotecas con SDK de Aplicaciones para Windows