Краткое руководство. Чтение и запись файлов (HTML)
[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]
Считайте и запишите файл с помощью объекта StorageFile.
Необходимые условия
Понятие об асинхронном программировании для приложений среды выполнения Windows на JavaScript
Сведения о записи асинхронных приложений см. в статье Краткое руководство. Использование условий в языке JavaScript.
Знание порядка вызова файла для считывания и (или) записи
Сведения о вызове файла средством выбора файлов см. в статье Краткое руководство: доступ к файлам с помощью средства выбора файлов.
Файл, используемый в примерах
Весь код, используемый в примерах, взят из примера доступа к файлу и зависит от глобальной переменной sampleFile
примера. В этих примерах такая переменная представляет файл sample.dat
, который считывается или записывается.
В примере доступа к файлу создание файла sample.dat
и сохранение возвращаемого объекта storageFile выполняются следующим образом.
Windows.Storage.ApplicationData.current.localFolder.createFileAsync("sample.dat",
Windows.Storage.CreationCollisionOption.replaceExisting).then(function (file) {
sampleFile = file;
});
Примечание Чтобы создавать файлы в библиотеках, необходимо объявить требуемые возможности в манифесте приложения. Дополнительную информацию о доступе к файлу и возможностях файла см. в разделах Доступ к файлам и права доступа и Доступ к пользовательским ресурсам с помощью среды выполнения Windows.
Запись в файл
Здесь показан порядок записи в файл, если имеется доступный для записи файл и представляющий его объект storageFile.
Запись текста в файл
Чтобы записать текст в файл, вызовите методы writeTextAsync класса fileIO.
В образце доступа к файлу вызов метода writeTextAsync(file, contents) для записи произвольного текста в объект sampleFile
выполняется следующим образом:
Windows.Storage.FileIO.writeTextAsync(sampleFile, "Swift as a shadow").then(function () {
// Add code to do something after the text is written to the file
});
Хотя методы writeTextAsync не возвращают значение, для объявления функции и выполнения дополнительных задач после записи текста в файл можно использовать then или done, как показано в образце.
Запись байт в файл с использованием буфера
Получите буфер байт, которые необходимо записать в файл.
Например, в образце доступа к файлу для получения буфера байтов на основе произвольной строки вызывается метод convertStringToBinary:
var buffer = Windows.Security.Cryptography.CryptographicBuffer.convertStringToBinary( 'What fools these mortals be', Windows.Security.Cryptography.BinaryStringEncoding[''] );
Запишите байты из буфера в файл, вызвав метод writeBufferAsync класса fileIO.
В образце доступа к файлу метод writeBufferAsync для записи байтов из буфера в объект
sampleFile
используется следующим образом:Windows.Storage.FileIO.writeBufferAsync(sampleFile, buffer).then(function () { // Add code to do something after the text is written to the file });
Хотя writeBufferAsync не возвращает значение, для объявления функции и выполнения дополнительных задач после записи текста в файл можно использовать методы then или done, как показано в образце.
Запись текста в файл с использованием транзакционного потока
Откройте поток в файл, вызвав метод storageFile.openTransactedWriteAsync. По завершении операции открытия будет возвращен поток содержимого файла.
В образце доступа к файлу открытие потока в файл (
sampleFile
) вызовом метода storageFile.openTransactedWriteAsync выполняется следующим образом.sampleFile.openTransactedWriteAsync().then(writeToStream);
Обязательно объявите функцию (например,
writeToStream
) для захватаtransaction
(тип StorageStreamTransaction), чтобы вы могли произвести запись в файл по завершении метода:function writeToStream(transaction) { // Add code to use the stream to write to your file }
Добавьте свой код в функцию
writeToStream
, которая запишет текст в файл после завершения метода storageFile.openAsync, как описано ниже.Используйте
transaction
для записи текста в поток, создав новый объект dataWriter и вызвав метод dataWriter.writeString.В образце доступа к файлу запись текста в поток выполняется следующим образом.
var dataWriter = new Windows.Storage.Streams.DataWriter(transaction.stream); dataWriter.writeString("Swift as a shadow");
Сохраните текст в файл и закройте поток, вызвав методы .dataWriter.storeAsync и
transaction
.commitAsync.В образце доступа к файлу сохранение текста в файле и закрытие потока выполняется следующим образом:
dataWriter.storeAsync().then(function () { transaction.commitAsync().done(function () { // Text in stream has been saved to the file transaction.close(); }); });
Скачайте образец доступа к файлу, чтобы ознакомиться с примерами кода в контексте внутри функций.
Чтение из файла
Здесь показан порядок чтения из файла, если имеется доступный для чтения файл и представляющий его объект storageFile.
Чтение текста из файла
Чтобы выполнить чтение текста из файла, вызовите методы readTextAsync класса fileIO.
В образце доступа к файлу чтение текста из файла путем вызова readTextAsync(file) для считывания его из sampleFile
выполняется следующим образом:
Windows.Storage.FileIO.readTextAsync(sampleFile).then(function (contents) {
// Add code to process the text read from the file
});
С помощью методов then или done вы можете объявить функцию для захвата и обработки текста, считанного из файла. По завершении метода readTextAsync текст будет передан в эту функцию как объект String (contents
в образце).
Чтение байт из файла с использованием буфера
Считайте байты из файла в буфер, вызвав метод readBufferAsync класса fileIO.
В образце доступа к файлу считывание байтов в буфер из файла путем вызова readBufferAsync выполняется следующим образом:
Windows.Storage.FileIO.readBufferAsync(sampleFile).then(function (buffer) {
// Add code to process the text read from the file
});
С помощью методов then или done вы можете объявить функцию для захвата и обработки данных buffer
(тип IBuffer) по завершении метода readBufferAsync.
В образце доступа к файлу захватывается buffer
, а затем с помощью объекта dataReader считывается длина buffer
.
Windows.Storage.FileIO.readBufferAsync(sampleFile).then(function (buffer) {
var dataReader = Windows.Storage.Streams.DataReader.fromBuffer(buffer);
var output = dataReader.readString(buffer.length);
});
Считывать длину buffer
таким способом не слишком интересно, но вы можете придумать свои, более полезные на практике способы работы с данными объекта buffer
. Чтобы получить представление о том, что можно делать с этими данными, ознакомьтесь с методами класса dataReader.
Чтение текста из файла с использованием потока
Откройте поток из файла, вызвав метод storageFile.openAsync. По завершении операции открытия будет возвращен поток содержимого файла.
В образце доступа к файлу открытие потока в файл (
sampleFile
) вызовом метода storageFile.openAsync выполняется следующим образом.sampleFile.openAsync(Windows.Storage.FileAccessMode.readWrite).then(readFromStream);
Обязательно объявите функцию (например,
readFromStream
) для захвата потока (тип IRandomAccessStream), чтобы можно было выполнять чтение из него после завершения метода:function readFromStream(readStream) { // Add code to use the stream to read text from your file }
Добавьте свой код функции
readFromStream
, которая считает текст из файла после завершения метода storageFile.openAsync, как описано ниже.Получите объект dataReader, чтобы выполнить чтение из
readStream
.В образце доступа к файлу объект dataReader получается следующим образом.
var dataReader = new Windows.Storage.Streams.DataReader(readStream);
Для чтения текста вызовите методы dataReader.loadAsync и dataReader.readString.
В образце доступа к файлу чтение текста выполняется следующим образом.
dataReader.loadAsync(readStream.size).done(function (numBytesLoaded) { var fileContent = dataReader.readString(numBytesLoaded); // Process text read from the file dataReader.close(); });
Скачайте образец доступа к файлу, чтобы ознакомиться с примерами кода в контексте внутри функций.
Краткая сводка и дальнейшие действия
Теперь вы знаете, как выполнять чтение из файла и запись в него, если есть объект storageFile, представляющий файл.
Сведения о работе с файлами изображений см. в разделах Выбор и отображение изображения, Декодирование изображения и Использование BLOB-объекта для сохранения и загрузки примера содержимого.
Связанные разделы
Краткое руководство: доступ к файлам с помощью средства выбора файлов
Выбор и отображение изображения
Доступ к файлам и права доступа
Использование BLOB-объекта для сохранения и загрузки образца содержимого
Ссылка
Windows.Storage.StorageFile class