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


Краткое руководство. Чтение и запись файлов (HTML)

[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]

Считайте и запишите файл с помощью объекта StorageFile.

Необходимые условия

Файл, используемый в примерах

Весь код, используемый в примерах, взят из примера доступа к файлу и зависит от глобальной переменной 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, как показано в образце.

Запись байт в файл с использованием буфера

  1. Получите буфер байт, которые необходимо записать в файл.

    Например, в образце доступа к файлу для получения буфера байтов на основе произвольной строки вызывается метод convertStringToBinary:

    var buffer = Windows.Security.Cryptography.CryptographicBuffer.convertStringToBinary(
        'What fools these mortals be', Windows.Security.Cryptography.BinaryStringEncoding['']
    );
    
  2. Запишите байты из буфера в файл, вызвав метод 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, как показано в образце.

Запись текста в файл с использованием транзакционного потока

  1. Откройте поток в файл, вызвав метод 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
    }
    
  2. Добавьте свой код в функцию writeToStream, которая запишет текст в файл после завершения метода storageFile.openAsync, как описано ниже.

    1. Используйте transaction для записи текста в поток, создав новый объект dataWriter и вызвав метод dataWriter.writeString.

      В образце доступа к файлу запись текста в поток выполняется следующим образом.

      var dataWriter = new Windows.Storage.Streams.DataWriter(transaction.stream);
      dataWriter.writeString("Swift as a shadow");
      
    2. Сохраните текст в файл и закройте поток, вызвав методы .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.

Чтение текста из файла с использованием потока

  1. Откройте поток из файла, вызвав метод 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
    }
    
  2. Добавьте свой код функции readFromStream, которая считает текст из файла после завершения метода storageFile.openAsync, как описано ниже.

    1. Получите объект dataReader, чтобы выполнить чтение из readStream.

      В образце доступа к файлу объект dataReader получается следующим образом.

      var dataReader = new Windows.Storage.Streams.DataReader(readStream);
      
    2. Для чтения текста вызовите методы 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

Windows.Storage.Streams.DataReader class

Windows.Storage.Streams.DataWriter class