Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье показано, как получить доступ к файлам и папкам с помощью API .NET в упакованных приложениях WinUI. Вы узнаете, как считывать и записывать файлы, управлять каталогами и дисками, а также работать с потоками памяти для кодирования строк и декодирования.
Приложения WinUI могут использовать API .NET вместе с API WinRT и Win32 для обеспечения комплексного доступа к файловой системе. Примеры, приведенные в этой статье, посвящены пространству имен System.IO , который предоставляет основные функции для операций файлов и каталогов.
Предпосылки
- Visual Studio 2022 с установленной рабочей нагрузкой разработки приложений WinUI
- Упакованный проект WinUI
- Базовое знакомство с разработкой C# и .NET
Что вы узнаете
В этой статье вы узнаете, как выполнять следующие задачи.
- Чтение и запись файлов с помощью FileStream, BinaryWriter и BinaryReader
- Создание, удаление каталогов и управление ими с помощью классов DirectoryInfo и Directory
- Получение сведений о диске с помощью DriveInfo
- Кодирование и декодирование строк с помощью MemoryStream и StreamReader
Чтение и запись файлов с помощью 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 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 для асинхронной записи строки в поток памяти, а затем считывает строку из потока памяти. Класс кодировки
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
Windows developer