Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Использование класса System::IO::FileStream для работы с файлами
(http://msdn.microsoft.com/ru-ru/library/system.io.filestream.aspx)
Формат объявления объекта FileStream имеет следующий вид:
FileStream^ fs = gcnew FileStream(fileName, mode, [access], [share], [bufferSize], [options]); где: fileName – строка, содержащая полное имя файла, связанного с объектом FileStream; mode – константа из перечисления System::IO::FileMode, определяющая способ открытия или создания файла (таблица 11.8); access – константа из перечисления System::IO::FileAccess, определяющая способ доступа к файлу (таблица 11.8); share – константа из перечисления System::IO::FileShare, определяющая способ совместного использования файла процессами (таблица 11.8); bufferSize – значение (Int32, большее 0), определяющее размер буфера в байтах. Для значений от 0 до 8 фактический размер буфера устанавливается равным 8 байт; options – константа из перечисления System::IO::FileOptions, задающая дополнительные параметры файла (таблица 11.8).
Таблица 11.15. Основные свойства и методы класса FileStream
Пример 11.14. Использование свойств CanRead и CanWrite класса FileStream для определения возможности чтения и записи файла. Результатом выполнения этого примера будет строка: "Файл c:\temp\Test.txt не перезаписываем". Чтобы получить выходное сообщение "Файл c:\temp\Test.txt может быть использован для записи и чтения.", нужно изменить в конструкторе FileStream параметр FileAccess на ReadWrite.
#include "stdafx.h" using namespace System; using namespace System::IO; int main() { String^ fname = "c:\\temp\\Test.txt"; FileStream^ fs = gcnew FileStream(fname, FileMode::OpenOrCreate, FileAccess::Read); if (fs->CanRead && fs->CanWrite) Console::WriteLine("Файл {0} может быть использован " + "для записи и чтения.", fname); else if (fs->CanRead) Console::WriteLine("Файл {0} не перезаписываем.", fname); Console::ReadLine(); return 0; }
Пример 11.15. Использование свойств Length и Name, а также методов WriteByte и ReadByte класса FileStream для записи данных в файл (байт за байтом) и проверки правильности записанных данных.
#include "stdafx.h" using namespace System; using namespace System::IO; int main() { String^ fileName = "c:\\temp\\MyTest.txt"; // Генерация случайных данных для записи в файл. array<unsigned char>^ dataArray = gcnew array<unsigned char>(1000); Random^ rnd = gcnew Random; rnd->NextBytes(dataArray); FileStream^ fileStream = gcnew FileStream(fileName, FileMode::Create); // Запись данных в файл байт за байтом. for (int i = 0; i < dataArray->Length; i++) fileStream->WriteByte(dataArray[i]); // Установка потоковой позиции в начало файла. fileStream->Seek(0, SeekOrigin::Begin); // Чтение и проверка данных. for (int i = 0; i < fileStream->Length; i++) if (dataArray[i] != fileStream->ReadByte()) { Console::WriteLine("Ошибка записи данных."); return 0; } Console::WriteLine("Данные были записаны в файл {0} и " + "проверены.", fileStream->Name); Console::ReadLine(); return 0; } /* Вывод: Данные были записаны в файл c:\temp\MyTest.txt и проверены. */
Пример 11.16. Использование свойства Length, а также методов Readи Write класса FileStream для считывания содержимого одного файла и записи его в другой файл.
#include "stdafx.h" using namespace System; using namespace System::IO; int main() { // Определение файла для чтения и нового файла (для записи). String^ pathSource = "c:\\temp\\Source.txt"; String^ pathNew = "c:\\temp\\newFile.txt"; FileStream^ fsSource = gcnew FileStream(pathSource, FileMode::Open, FileAccess::Read); // Чтение исходного файла в байтовый массив. array<unsigned char>^ bytes = gcnew array<unsigned char>(fsSource->Length); int numBytesToRead = (int)fsSource->Length; int numBytesRead = 0; while (numBytesToRead > 0) { // Чтение возвращает значение от 0 до numBytesToRead. int n = fsSource->Read(bytes, numBytesRead, numBytesToRead); if (n == 0) break; // Выход из цикла, если конец файла numBytesRead += n; numBytesToRead -= n; } numBytesToRead = bytes->Length; // Вывод на экран: Console::WriteLine("Файл {0} прочитан.", pathSource); Console::WriteLine("Массив считанных байтов:"); for (int i = 0; i < bytes->Length; i++) Console::WriteLine(bytes[i]); // Запись байтового массива в другой FileStream (в новый файл). FileStream^ fsNew = gcnew FileStream(pathNew, FileMode::Create, FileAccess::Write); fsNew->Write(bytes, 0, numBytesToRead); Console::WriteLine("Файл {0} записан.", pathNew); Console::ReadLine(); return 0; } /* Вывод: Файл c:\temp\Source.txt прочитан. Массив считанных байтов: ... Файл c:\temp\newFile.txt записан. */
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2018-05-10; просмотров: 231. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |