Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Лістинг 19.3. Робота з текстовим файлом ⇐ ПредыдущаяСтр 5 из 5
using System; using System.Collections.Generic; using System.Text; using System.IO; namespace StringFileDemo { class Program { static void Main(string[] ergs) { // Запис i текстовий файл: FileStream Stream = new FileStream(" strings.dat", FileMode.Create, FileAccess.Write); StreamWriter Writer = new StreamWriter(Stream); Writer.WriteLine(" Мело, мело по всій Землі"); Writer.WriteLine(" У всі межі."); Writer.WriteLine(" Свічка горіла на столі."); Writer.WriteLine(" Свічка горіла..."); Writer.Close(); Stream.Close(); // Читання з файлу: Stream = new FileStream(" strings.dat", FileMode.Open, FileAccess.Read); StreamReader Reader = new StreamReader(Stream); string S; do { S = Reader.ReadLine(); if (S! = null) Console.WriteLine(S); } while (S! = null); Reader.Close(); Stream.Close(); Console.ReadLine(); } } } При створенні об'єкту FileStream йому передаються ім'я файлу і два параметри: FileMode, що визначає спосіб створення потоку, і FileAccess, регулюючий доступ потоку до даним. У табл. 19.5 і 19.6 указуються допустимі значення цих параметрів. Для потоку існує поняття поточного запису — в цей запис поміщаються дані і з неї вони прочитуються. Положенням поточного запису можна управляти за допомогою методу Seek (), що має таку сигнатуру: public virtual long Seek(int Offset, SeekOrigin Origin); Тут Offset — зсув щодо позиції, вказаної параметром Origin. Перерахування SeekOrigin може мати значення, вказане в табл. 18.7. Таблиця 19.5. Значення параметра FileMode
Таблиця 19.6.Значення параметра FileAccess
Таблиця 19.7. Значення перерахування SeekOrigin
Таким чином, вказаний далі виклик зробить поточним запис з індексом 10 від початку потоку (індексація починається з 0):
Stream.Seek(10, SeekOrigin.Begin);
Фізичний запис даних у файл реалізується у момент закриття потоку методом Close () або виштовхування записів з проміжного буфера методом Flush (). У другому випадку потік не закривається і готовий до продовження операцій. При читанні рядків з текстового файлу потрібно контролювати кінець файлу. Для цього змінна типу string в С# може приймати значення null, якщо з файлe нічого не прочитано, тобто якщо файл вичерпаний (див. показаний раніше приклад). Іншим способом контролю є звернення до методу StreamReader.Peek(), який повертає позитивне число, якщо файл не вичерпаний, або -1 інакше. Таким чином, цикл читання записів з текстового файлу спрощується: while (Reader.Peek() > 0) Console.WriteLine(Reader.ReadLine());
|