Поделиться через


Доступ к файлам и папкам с помощью пакета SDK для приложений Windows и .NET

Упакованные приложения пакета SDK для приложений windows могут использовать API .NET для чтения и записи файлов, работы с папками и чтения сведений о дисках и томах. Кроме того, любое упакованое классическое приложение может использовать API WinRT и Win32 в пакете SDK для Windows, а также API, предоставляемые в пакете SDK для .NET. В этой статье содержатся рекомендации по использованию API .NET System.IO для чтения и записи файлов, управления дисками и папками, а также работы с потоками памяти для кодирования или декодирования строковых данных.

Чтение и запись файлов с помощью API .NET

В следующем примере ReadWriteFiles создается новый файл, записывается набор целых чисел в файл, а затем считывает целые числа из файла. В примере используется класс FileStream для создания нового файла и открытия файла для чтения или записи. В примере используется класс BinaryWriter для записи целых чисел в файл и класса BinaryReader для чтения целых чисел из файла.

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

Управление дисками и папками в .NET

В следующем примере показано, как использовать классы DirectoryInfo и Directory для создания, удаления и управления папками. В примере используется DirectoryInfo класс для создания нового каталога, создания подкаталога и удаления каталога. Класс DirectoryInfo предоставляет методы для создания, перемещения и перечисления с помощью каталогов и подкаталогов. Класс Directory предоставляет статические методы для создания, перемещения и перечисления с помощью каталогов и подкаталогов.

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

В этом примере используется статический метод GetDrives для получения сведений обо всех дисках в системе. Класс DriveInfo предоставляет сведения о диске, например тип диска, метку, файловую систему и доступное свободное место.

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

Кодирование и декодирование строк с помощью MemoryStream

В этом примере показано, как использовать класс MemoryStream для кодирования и декодирования строковых данных. Сначала он создает MemoryStream асинхронную запись строки в поток памяти, а затем считывает строку из потока памяти. Класс кодирования используется для преобразования строки в массив байтов, а затем записи массива байтов в поток памяти. Затем StreamReader используется для асинхронного чтения массива байтов из потока памяти и последующего преобразования массива байтов обратно в строку путем вызова 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);
}

Примечание.

Сведения о преобразовании между потоками .NET и потоками WinRT см. в статье "Практическое руководство. Преобразование между .NET и среда выполнения Windows потоками".

См. также

Доступ к файлам и папкам с помощью пакета SDK для приложений Windows и API WinRT

Файлы, папки и библиотеки с помощью пакета SDK для приложений Windows