Работа с файлами

В этом разделе описывается,как приступить к чтению файлов и записи в файлы в приложении универсальной платформы Windows (UWP). Здесь представлены основные интерфейсы API и типы, а также ссылки на дополнительные ресурсы.

Это не руководство. Если вам необходимо полное руководство, ознакомьтесь с разделом Создание, запись и чтение файла, в котором показано, как создать, считать и записать файл, а также использовать буферы и потоки. Вас также может заинтересовать пример доступа к файлам, в котором показано, как создать, считать, записать, скопировать и удалить файл, а также как получать свойства файла и запоминать файлу или папку, чтобы ваше приложение легко могло получить доступ к ним снова.

Мы рассмотрим код для записи текста в файл и чтения текста из файла, а также для получения доступа к локальным, перемещаемым и временным папкам приложения.

Что необходимо знать?

Ниже приведены основные типы, о которых нужно знать для чтения текста и записи текста в файл.

  • Windows.Storage.StorageFile представляет файл. Этот класс содержит свойства, которые предоставляют сведения о файле, и методы для создания, открытия, копирования, удаления и переименования файлов. Возможно, вы привыкли работать со строковыми путями. Есть ряд API среды выполнения Windows, принимающих строковый путь, но чаще всего вы будете использовать объект StorageFile для представления файла, так как некоторые файлы на платформе UWP могут быть без пути или путь к ним может быть слишком длинным. Используйте метод StorageFile.GetFileFromPathAsync() для преобразования строкового пути в объект StorageFile.

  • Класс FileIO предоставляет простой способ для чтения и записи текста. Этот класс также может читать и записывать массив байтов или содержимое буфера. Этот класс очень похож на класс PathIO. Основное различие заключается в том, что вместо использования строкового пути, как в PathIO, он принимает StorageFile.

  • Windows.Storage.StorageFolder представляет папку (каталог). Этот класс содержит методы для создания файлов, запроса содержимого папки, создания, переименования и удаление папок, а также свойства, которые предоставляют сведения о папке.

Вот распространенные способы получения StorageFolder.

  • Windows.Storage.Pickers.FolderPicker позволяет пользователю перейти к требуемой папке.
  • Windows.Storage.ApplicationData.Current предоставляет объект StorageFolder для одной из локальных для приложения папок, например локальной, перемещаемой и временной папки.
  • Windows.Storage.KnownFolders предоставляет StorageFolder для известных библиотек, таких как "Музыка" и "Изображения".

Запись текста в файл

В рамках этого обзора мы рассмотрим простой сценарий: чтение и запись текста. Начнем с кода, который использует класс FileIO, чтобы записать текст в файл.

Windows.Storage.StorageFolder storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
Windows.Storage.StorageFile file = await storageFolder.CreateFileAsync("test.txt",
        Windows.Storage.CreationCollisionOption.OpenIfExists);

await Windows.Storage.FileIO.WriteTextAsync(file, "Example of writing a string\r\n");

// Append a list of strings, one per line, to the file
var listOfStrings = new List<string> { "line1", "line2", "line3" };
await Windows.Storage.FileIO.AppendLinesAsync(file, listOfStrings); // each entry in the list is written to the file on its own line.

Сначала мы определим, где файл должен быть размещен. Windows.Storage.ApplicationData.Current.LocalFolder предоставляет доступ к локальной папке данных, которая создается для приложения во время установки. Дополнительные сведения о папках, доступных вашему приложению, см. в разделе Доступ к файловой системе.

Затем мы используем StorageFolder для создания файла (или его открытия, если он уже существует).

Класс FileIO предоставляет удобный способ записи текста в файл. FileIO.WriteTextAsync() заменяет все содержимое файла предоставленным текстом. FileIO.AppendLinesAsync() добавляет в файл коллекцию строк, записывая по одному строковому значению в каждую строку.

Чтение текста из файла

Как и при записи в файл, чтение файла начинается с указания его расположения. Мы будем использовать то же расположение, что и в примере выше. Затем мы используем класс FileIO для чтения содержимого файла.

Windows.Storage.StorageFolder storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
Windows.Storage.StorageFile file = await storageFolder.GetFileAsync("test.txt");

string text = await Windows.Storage.FileIO.ReadTextAsync(file);

Вы можете также считывать каждую строку файла в отдельные строки в коллекции с помощью IList<string> contents = await Windows.Storage.FileIO.ReadLinesAsync(sampleFile);.

Доступ к файловой системе

На платформе UWP доступ к папке ограничивается, чтобы обеспечить целостность и конфиденциальность данных пользователя.

Папки приложения

При установке приложение UWP в каталоге c:\users<имя пользователя>\AppData\Local\Packages<идентификатор пакета приложения>\ создается несколько папок для хранения, помимо прочего, локальных, перемещаемых и временных файлов приложения. Приложению не нужно объявлять какие-либо возможности для доступа к этим папкам, и они недоступны другим приложениям. Эти папки также удаляются при удалении приложения.

Вот некоторые из папок приложения, которые часто используются.

  • LocalState: для данных, локальных для текущего устройства. При резервном копировании устройства данные в этом каталоге сохраняются в образе резервной копии в службе OneDrive. Если пользователь сбрасывает или заменяет устройство, эти данные будут восстановлены. Для доступа к этой папке используйте Windows.Storage.ApplicationData.Current.LocalFolder.. Сохраните локальные данные, которые не требуется архивировать в OneDrive, в объекте LocalCacheFolder, к которому можно обратиться с помощью Windows.Storage.ApplicationData.Current.LocalCacheFolder.

  • RoamingState: данные, хранящиеся здесь, больше не перемещались (Windows 11), но папка по-прежнему доступна. Для доступа к перемещаемой папке используйте Windows.Storage.ApplicationData.Current.RoamingFolder. Рекомендуемая замена — Служба приложений Azure. Служба приложений Azure широко поддерживается и хорошо описана. Это надежное решение, которое поддерживает сценарии с использованием разных платформ и экосистем, включая iOS, Android и интернет-решения.

  • TempState: для данных, которые могут быть удалены, когда приложение не запущено. Для доступа к этой папке используйте Windows.Storage.ApplicationData.Current.TemporaryFolder.

Доступ к остальной части файловой системы

Приложение UWP должно объявить свои намерения для доступа к определенной библиотеке пользователя, добавив соответствующую возможность в свой манифест. Затем при установке приложения пользователям предлагается подтвердить, что они разрешили доступ к указанной библиотеке. Если это не так, приложение не устанавливается. Существуют возможности для доступа к библиотекам изображений, видео и музыки. Полный список доступен в разделе Объявление возможностей приложения. Чтобы получить StorageFolder для этих библиотек, используйте класс Windows.Storage.KnownFolders.

Библиотека документов

Хотя и существует возможность доступа к библиотеке документов пользователя, она ограничена, то есть приложение, которое ее объявит, будет отклонено в Microsoft Store, если вы не выполните процедуру получения специального разрешения. Оно не предназначено для общего использования. Вместо этого используйте средства выбора файла или папки (см. разделы Открытие файлов и папок с помощью средства выбора и Сохранение файла с помощью средства выбора), позволяющие пользователям перейти к папке или файлу. При переходе пользователей к файлу или папке они неявно разрешают приложению доступ к ним, и система разрешает доступ.

Общий доступ

Кроме того, ваше приложение может объявить ограниченную возможность broadFileSystem в манифесте, которая также должна быть утверждена в Microsoft Store. Затем приложение сможет получить доступ к любому файлу, к которому обращается пользователь, без вмешательства средства выбора файла или папки.

Полный список расположений, которые доступны приложениям, приведен в разделе Разрешения на доступ к файлам.

Полезные интерфейсы API и документы

Ниже приведено краткое описание интерфейсов API и другая полезная документация, которая поможет вам приступить к работе с файлами и папками.

Полезные интерфейсы API

API Description
Windows.Storage.StorageFile Предоставляет сведения о файле и методы для создания, открытия, копирования, удаления и переименования файлов.
Windows.Storage.StorageFolder Предоставляет сведения о папке, методы для создания файлов и методы для создания, удаления и переименования папок.
FileIO Предоставляет простой способ для чтения и записи текста. Этот класс также может читать и записывать массив байтов или содержимое буфера.
PathIO Предоставляет простой способ чтения и записи текста из файла по строковому пути к файлу. Этот класс также может читать и записывать массив байтов или содержимое буфера.
DataReader и DataWriter Чтение буферов, байтов, целых чисел, идентификаторов GUID, объектов TimeSpan и других данных из потока и их запись в поток.
Windows.Storage.ApplicationData.Current Предоставляет доступ к папкам, созданным для приложения, таким как папки локальных, перемещаемых и временных файлов.
Windows.Storage.Pickers.FolderPicker Позволяет пользователю выбрать папку и возвращает ее StorageFolder. Этот класс используется, чтобы получить доступ к расположениям, которые по умолчанию приложению недоступны.
Windows.Storage.Pickers.FileOpenPicker Позволяет пользователю выбрать файл и возвращает его StorageFile. Этот класс используется, чтобы получить доступ к файлу, который по умолчанию приложению недоступен.
Windows.Storage.Pickers.FileSavePicker Позволяет пользователю выбрать имя, расширение и расположение файла. Возвращает StorageFile. Этот класс используется, чтобы сохранить файл в расположении, которое недоступно приложению по умолчанию.
Пространство имен Windows.Storage.Streams Охватывает потоки чтения и записи. В частности, изучите классы DataReader и DataWriter, которые считывают и записывают буферы, байты, целые числа, GUID, TimeSpan и др.

Полезные документы

Раздел Описание
Пространство имен Windows.Storage Справочная документация по API.
Файлы, папки и библиотеки Концептуальная документация.
Создание, запись и чтение файла Описание создания, чтения и записи текста, двоичных данных и потоков.
Начало работы с локальным хранением данных приложения Помимо рекомендаций для хранения локальных данных здесь также описывается предназначение папок LocalSettings и LocalCache.
Хранение и получение параметров и других данных приложения Общие сведения о различных хранилищах данных приложений, таких как локальные, перемещаемые и временные папки.
Разрешения на доступ к файлам Сведения о расположениях в файловой системе, доступных вашему приложению.
Открытие файлов и папок с помощью средства выбора Здесь описывается, как получить доступ к файлам и папкам, разрешив пользователю взаимодействовать со средством выбора.
Windows.Storage.Streams Типы, используемые для чтения и записи потоков.
Файлы и папки в библиотеках музыки, изображений и видео Здесь описывается, как удалить папки из библиотек, получить список папок в библиотеке и найти сохраненные фотографии, музыку и видео.

Полезные примеры кода

Пример кода Description
Пример данных приложения Здесь показано, как хранить и извлекать данные каждого отдельного пользователя, с помощью интерфейсов API данных приложения.
Пример доступа к файлу Здесь показано, как создать, считать, скопировать и удалить файл.
Пример средства выбора файлов Здесь показано, как получить доступ к файлам и папкам, позволяя пользователю выбирать их с помощью пользовательского интерфейса, и как сохранить файл, чтобы пользователь мог указывать имя, тип и расположение файла.
Пример JSON В этой статье показано, как кодировать и декодировать объекты, массивы, строки, числа и логические значения JSON с помощью пространства имен Windows.Data.Json.
Дополнительные примеры кода Выберите Файлы, папки и библиотеки из раскрывающегося списка категорий.