Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Использование классов System::IO::StreamReader и System::IO::StreamWriter для работы с файлами




(http://msdn.microsoft.com/ru-ru/library/system.io.streamreader.aspx)

(http://msdn.microsoft.com/ru-ru/library/system.io.streamwriter.aspx)

 

Форматы объявления объектов StreamReader и StreamWriter имеют следующий вид:

 

StreamReader^ sr = gcnew StreamReader(fileName, [encoding],

                    [detectEncoding], [bufferSize]);

 

StreamWriter^ sw = gcnew StreamWriter(fileName, [append],

                                 [encoding], [bufferSize]);

где:

fileName       – строка, содержащая полное имя файла, связанного с объектом StreamReader;

append          – определяет, будет ли указанный файл перезаписан (false), либо данные в него будут добавлены (true). Если указанный файл не существует, этот параметр не используется и создается новый файл;

encoding       – кодировка символов, которую нужно использовать (одно из свойств класса System::Text::Encoding, таблица 11.6);

detectEncoding – определяет, необходимо ли осуществлять поиск меток порядка следования байтов в начале файла (true или false). Для обнаружения просматриваются первые три байта потока. Автоматически распознается текст в кодировке UTF-8, Unicode с прямым и обратным порядком следования байтов. В противном случае используется кодировка, определяемая пользователем;

bufferSize     – значение (Int32, большее 0), определяющее минимальный размер буфера в байтах (задается в 16-разрядных символах). Если заданное значение меньше минимального допустимого размера (128 символов), то используется минимальный допустимый размер.

 

Таблица 11.16. Основные свойства и методы класса StreamReader
из пространства имен System::IO

Имя Описание
Свойства  
BaseStream Возвращает основной поток.
CurrentEncoding Получает текущую кодировку символов, используемую текущим объектом StreamReader.
EndOfStream Получает значение, определяющее, находится ли текущая позиция потока в его конце.
Методы  
Close(); Закрывает объект StreamReader и основной поток и освобож-дает все системные ресурсы, связанные с устройством чтения.
DiscardBufferedData(); Очищает внутренний буфер объекта StreamReader.
Peek(); Возвращает целое число, представляющее следующий символ для чтения (позицию ввода), или значение -1 (если доступных для чтения символов нет или поток не поддерживает поиск).
Read(); Read(arrCh,i,n); Выполняет чтение следующего символа из входного потока и перемещает положение символа на одну позицию вперед. Считывает в буфер (arrCh) заданное максимальное количество (n) символов из текущего потока, начиная с заданного индекса (i).
ReadBlock(arrCh,i,n); Считывает заданное максимальное количество (n) символов из текущего потока, начиная с заданного индекса (i), и записывает данные в буфер (arrCh).
ReadLine(); Выполняет чтение строки символов из текущего потока и возвращает данные в виде строки или null (если достигнут конец входного потока).
ReadToEnd(); Считывает поток, начиная с текущей позиции ввода и до его конца.

 

 

Таблица 11.17. Основные свойства и методы класса StreamWriter
из пространства имен System::IO

Имя Описание
Свойства
AutoFlush Получает или задает значение, определяющее, будет ли StreamWriter сбрасывать буфер в основной поток после каждого вызова StreamWriter.Write().
Encoding Получает кодировку Encoding, в которой осуществляется запись выходных данных.
NewLine Получает или задает признак конца строки, используемой текущим TextWriter.
Методы
Close(); Закрывает текущий объект StreamWriter (файл) и базовый поток.
Write(v); Write(sf,v1); Write(sf,v1,v2); Write(sf,v1,v2,v3); Write(sf,v[]); Write(arrCh); Write(arrCh,i,n); Записывает в текстовый файл 1, 2 или 3 объекта (v – числового, строкового, символьного или логического типа) или массива объектов(v[]) в соответствии с заданным форматом (sf).   Записывает в текстовый файл n символов, начиная с i-го, из массива символов (arrCh).
WriteLine(v); WriteLine(sf,v1); WriteLine(sf,v1,v2); WriteLine(sf,v1,v2,v3); WriteLine(sf,arrV); WriteLine(arrCh); WriteLine(arrCh,i,n); Записывает в текстовый файл 1, 2 или 3 объекта (v – числового, строкового, символьного или логического типа) или массива объектов(arrV) в соответствии с заданным форматом (sf). В завершении выводится признак конца строки. Записывает в текстовый файл n символов, начиная с i-го, из массива символов (arrCh).

 

 

Пример 11.17. Использование объектов StreamWriter и StreamReader соответственно для записи строк в текстовый файл (метод WriteLine), а затем чтения строк из него (метод ReadLine).

 

#include "stdafx.h"

using namespace System;

using namespace System::IO;

int main() {

  String^ fname = "c:\\temp\\Test.txt";

// Создание экземпляра класса StreamWriter для записи в файл

StreamWriter^ sw = gcnew StreamWriter(fname);

// Запись строк в файл

for (int i=1; i<5; i++)

   sw->WriteLine("Test {0}", i);

Console::WriteLine("Файл " + fname + " записан.");

sw->Close();                              // Закрытие файла

Console::ReadLine();

// Создание экземпляра класса StreamReader для чтения из файла

StreamReader^ sr = gcnew StreamReader(fname);

// Чтение и отображение строк из файла, до достижения его конца

String^ line = "";

while (line = sr->ReadLine())

     Console::WriteLine(line);

sr->Close();                            // Закрытие файла

Console::ReadLine();

  return 0;

}

/* Вывод:

Файл c:\temp\Test.txt записан.

Test 1

Test 2

Test 3

Test 4

*/

 

В этом примере чтение и отображение строк из файла можно реализовать и иначе, результат при этом не изменится.

 

while (sr->Peek() > -1)    // или while (!sr->EndOfStream)

     Console::WriteLine(sr->ReadLine());

или

while (sr->Peek() >= 0)  // или while (!sr->EndOfStream)

     Console::Write((Char)sr->Read());

или

Console::WriteLine(sr->ReadToEnd());

или

array<char>^ c = gcnew array<char>(32);

sr->Read(c, 0, c->Length);

Console::WriteLine(c);

 

 










Последнее изменение этой страницы: 2018-05-10; просмотров: 217.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...