🗊Презентация Организация файлового ввода/вывода. Лекция 23

Нажмите для полного просмотра!
Организация файлового ввода/вывода. Лекция 23, слайд №1Организация файлового ввода/вывода. Лекция 23, слайд №2Организация файлового ввода/вывода. Лекция 23, слайд №3Организация файлового ввода/вывода. Лекция 23, слайд №4Организация файлового ввода/вывода. Лекция 23, слайд №5Организация файлового ввода/вывода. Лекция 23, слайд №6Организация файлового ввода/вывода. Лекция 23, слайд №7Организация файлового ввода/вывода. Лекция 23, слайд №8Организация файлового ввода/вывода. Лекция 23, слайд №9Организация файлового ввода/вывода. Лекция 23, слайд №10Организация файлового ввода/вывода. Лекция 23, слайд №11Организация файлового ввода/вывода. Лекция 23, слайд №12Организация файлового ввода/вывода. Лекция 23, слайд №13Организация файлового ввода/вывода. Лекция 23, слайд №14Организация файлового ввода/вывода. Лекция 23, слайд №15Организация файлового ввода/вывода. Лекция 23, слайд №16Организация файлового ввода/вывода. Лекция 23, слайд №17Организация файлового ввода/вывода. Лекция 23, слайд №18Организация файлового ввода/вывода. Лекция 23, слайд №19Организация файлового ввода/вывода. Лекция 23, слайд №20Организация файлового ввода/вывода. Лекция 23, слайд №21Организация файлового ввода/вывода. Лекция 23, слайд №22Организация файлового ввода/вывода. Лекция 23, слайд №23Организация файлового ввода/вывода. Лекция 23, слайд №24Организация файлового ввода/вывода. Лекция 23, слайд №25Организация файлового ввода/вывода. Лекция 23, слайд №26Организация файлового ввода/вывода. Лекция 23, слайд №27Организация файлового ввода/вывода. Лекция 23, слайд №28Организация файлового ввода/вывода. Лекция 23, слайд №29Организация файлового ввода/вывода. Лекция 23, слайд №30Организация файлового ввода/вывода. Лекция 23, слайд №31Организация файлового ввода/вывода. Лекция 23, слайд №32Организация файлового ввода/вывода. Лекция 23, слайд №33Организация файлового ввода/вывода. Лекция 23, слайд №34Организация файлового ввода/вывода. Лекция 23, слайд №35Организация файлового ввода/вывода. Лекция 23, слайд №36Организация файлового ввода/вывода. Лекция 23, слайд №37Организация файлового ввода/вывода. Лекция 23, слайд №38Организация файлового ввода/вывода. Лекция 23, слайд №39Организация файлового ввода/вывода. Лекция 23, слайд №40Организация файлового ввода/вывода. Лекция 23, слайд №41Организация файлового ввода/вывода. Лекция 23, слайд №42Организация файлового ввода/вывода. Лекция 23, слайд №43Организация файлового ввода/вывода. Лекция 23, слайд №44Организация файлового ввода/вывода. Лекция 23, слайд №45Организация файлового ввода/вывода. Лекция 23, слайд №46Организация файлового ввода/вывода. Лекция 23, слайд №47Организация файлового ввода/вывода. Лекция 23, слайд №48Организация файлового ввода/вывода. Лекция 23, слайд №49Организация файлового ввода/вывода. Лекция 23, слайд №50Организация файлового ввода/вывода. Лекция 23, слайд №51Организация файлового ввода/вывода. Лекция 23, слайд №52Организация файлового ввода/вывода. Лекция 23, слайд №53Организация файлового ввода/вывода. Лекция 23, слайд №54Организация файлового ввода/вывода. Лекция 23, слайд №55Организация файлового ввода/вывода. Лекция 23, слайд №56Организация файлового ввода/вывода. Лекция 23, слайд №57Организация файлового ввода/вывода. Лекция 23, слайд №58Организация файлового ввода/вывода. Лекция 23, слайд №59Организация файлового ввода/вывода. Лекция 23, слайд №60Организация файлового ввода/вывода. Лекция 23, слайд №61Организация файлового ввода/вывода. Лекция 23, слайд №62Организация файлового ввода/вывода. Лекция 23, слайд №63Организация файлового ввода/вывода. Лекция 23, слайд №64Организация файлового ввода/вывода. Лекция 23, слайд №65Организация файлового ввода/вывода. Лекция 23, слайд №66Организация файлового ввода/вывода. Лекция 23, слайд №67Организация файлового ввода/вывода. Лекция 23, слайд №68Организация файлового ввода/вывода. Лекция 23, слайд №69Организация файлового ввода/вывода. Лекция 23, слайд №70Организация файлового ввода/вывода. Лекция 23, слайд №71Организация файлового ввода/вывода. Лекция 23, слайд №72Организация файлового ввода/вывода. Лекция 23, слайд №73Организация файлового ввода/вывода. Лекция 23, слайд №74Организация файлового ввода/вывода. Лекция 23, слайд №75Организация файлового ввода/вывода. Лекция 23, слайд №76Организация файлового ввода/вывода. Лекция 23, слайд №77Организация файлового ввода/вывода. Лекция 23, слайд №78Организация файлового ввода/вывода. Лекция 23, слайд №79Организация файлового ввода/вывода. Лекция 23, слайд №80Организация файлового ввода/вывода. Лекция 23, слайд №81Организация файлового ввода/вывода. Лекция 23, слайд №82Организация файлового ввода/вывода. Лекция 23, слайд №83Организация файлового ввода/вывода. Лекция 23, слайд №84Организация файлового ввода/вывода. Лекция 23, слайд №85Организация файлового ввода/вывода. Лекция 23, слайд №86Организация файлового ввода/вывода. Лекция 23, слайд №87Организация файлового ввода/вывода. Лекция 23, слайд №88Организация файлового ввода/вывода. Лекция 23, слайд №89Организация файлового ввода/вывода. Лекция 23, слайд №90Организация файлового ввода/вывода. Лекция 23, слайд №91Организация файлового ввода/вывода. Лекция 23, слайд №92Организация файлового ввода/вывода. Лекция 23, слайд №93Организация файлового ввода/вывода. Лекция 23, слайд №94Организация файлового ввода/вывода. Лекция 23, слайд №95Организация файлового ввода/вывода. Лекция 23, слайд №96Организация файлового ввода/вывода. Лекция 23, слайд №97Организация файлового ввода/вывода. Лекция 23, слайд №98Организация файлового ввода/вывода. Лекция 23, слайд №99Организация файлового ввода/вывода. Лекция 23, слайд №100Организация файлового ввода/вывода. Лекция 23, слайд №101Организация файлового ввода/вывода. Лекция 23, слайд №102Организация файлового ввода/вывода. Лекция 23, слайд №103Организация файлового ввода/вывода. Лекция 23, слайд №104Организация файлового ввода/вывода. Лекция 23, слайд №105Организация файлового ввода/вывода. Лекция 23, слайд №106

Содержание

Вы можете ознакомиться и скачать презентацию на тему Организация файлового ввода/вывода. Лекция 23. Доклад-сообщение содержит 106 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1






 Лекция 23
 
Организация файлового ввода/вывода
Описание слайда:
Лекция 23 Организация файлового ввода/вывода

Слайд 2





Потоки
Поток — это некая абстракция производства или потребления информации. 
С физическим устройством поток связывает система ввода-вывода. 
Все потоки действуют одинаково — даже если они связаны с разными физическими устройствами (дисковый файл, сетевой канал, место в памяти или любой другой объект, поддерживающий чтение и запись в линейном режиме). 
Существуют два типа потоков: 
□ Выходные 
□ Входные
Описание слайда:
Потоки Поток — это некая абстракция производства или потребления информации. С физическим устройством поток связывает система ввода-вывода. Все потоки действуют одинаково — даже если они связаны с разными физическими устройствами (дисковый файл, сетевой канал, место в памяти или любой другой объект, поддерживающий чтение и запись в линейном режиме). Существуют два типа потоков: □ Выходные □ Входные

Слайд 3





Байтовые и символьные потоки
В среде .NET Framework определены классы как для байтовых, так и для символьных потоков. Но на самом деле классы символьных потоков служат лишь оболочками для превращения заключенного в них байтового потока в символьный, автоматически выполняя любые требующиеся преобразования типов данных. Следовательно, символьные потоки основываются на байтовых, хотя они и разделены логически. Основные классы потоков определены в пространстве имен System.IO.
Описание слайда:
Байтовые и символьные потоки В среде .NET Framework определены классы как для байтовых, так и для символьных потоков. Но на самом деле классы символьных потоков служат лишь оболочками для превращения заключенного в них байтового потока в символьный, автоматически выполняя любые требующиеся преобразования типов данных. Следовательно, символьные потоки основываются на байтовых, хотя они и разделены логически. Основные классы потоков определены в пространстве имен System.IO.

Слайд 4





Некоторые классы System.IO
Описание слайда:
Некоторые классы System.IO

Слайд 5





Некоторые классы System.IO
Описание слайда:
Некоторые классы System.IO

Слайд 6





Некоторые классы System.IO
Описание слайда:
Некоторые классы System.IO

Слайд 7





Некоторые классы System.IO
Описание слайда:
Некоторые классы System.IO

Слайд 8





Класс Stream
Описание слайда:
Класс Stream

Слайд 9





Класс Stream
Описание слайда:
Класс Stream

Слайд 10





Класс Stream
Описание слайда:
Класс Stream

Слайд 11





Класс Stream
Описание слайда:
Класс Stream

Слайд 12





Порядок работы с файлом
1. Подключить пространство имен, в котором описываются стандартные классы для работы с файлами.
2. Объявить файловую переменную и связать ее с файлом на диске.
3. Выполнить операции ввода-вывода.
4. Закрыть файл.
Описание слайда:
Порядок работы с файлом 1. Подключить пространство имен, в котором описываются стандартные классы для работы с файлами. 2. Объявить файловую переменную и связать ее с файлом на диске. 3. Выполнить операции ввода-вывода. 4. Закрыть файл.

Слайд 13





Класс FileStream
FileStream представляет доступ к файлам на уровне байтов, поэтому, например, если надо считать или записать одну или несколько строк в текстовый файл, то массив байтов надо преобразовать в строки, используя специальные методы. 
Следовательно, для работы с текстовыми файлами применяются другие классы.
Однако, некоторые операции, например, произвольный доступ к файлу, могут выполняться только посредством объекта FileStream.
Описание слайда:
Класс FileStream FileStream представляет доступ к файлам на уровне байтов, поэтому, например, если надо считать или записать одну или несколько строк в текстовый файл, то массив байтов надо преобразовать в строки, используя специальные методы. Следовательно, для работы с текстовыми файлами применяются другие классы. Однако, некоторые операции, например, произвольный доступ к файлу, могут выполняться только посредством объекта FileStream.

Слайд 14





Класс FileStream
Для формирования байтового потока, привязанного к файлу, создается объект класса FileStream, например, с помощью конструктора: 
FileStream(string путь, FileMode режим); 
где путь обозначает имя открываемого файла, включая полный путь к нему; а режим — порядок открытия файла. 
Если попытка открыть файл оказывается неудачной, то генерируется исключение IOException.
Описание слайда:
Класс FileStream Для формирования байтового потока, привязанного к файлу, создается объект класса FileStream, например, с помощью конструктора: FileStream(string путь, FileMode режим); где путь обозначает имя открываемого файла, включая полный путь к нему; а режим — порядок открытия файла. Если попытка открыть файл оказывается неудачной, то генерируется исключение IOException.

Слайд 15





Класс FileStream
Описание слайда:
Класс FileStream

Слайд 16





Класс FileStream
Описание слайда:
Класс FileStream

Слайд 17





Класс FileStream
Если требуется ограничить доступ к файлу только для чтения или же только для записи, то в таком случае следует использовать такой конструктор:
FileStream(string путь, FileMode режим, FileAccess доступ);
где доступ обозначает конкретный способ доступа к файлу:
Read 	Открывает файл только для чтения
Write	Открывает файл только для записи
ReadWrite	Открывает файл только для чтения или записи
Описание слайда:
Класс FileStream Если требуется ограничить доступ к файлу только для чтения или же только для записи, то в таком случае следует использовать такой конструктор: FileStream(string путь, FileMode режим, FileAccess доступ); где доступ обозначает конкретный способ доступа к файлу: Read Открывает файл только для чтения Write Открывает файл только для записи ReadWrite Открывает файл только для чтения или записи

Слайд 18





Класс FileStream
Например, в следующем примере кода файл test.dat открывается только для чтения:
FileStream fin = new FileStream("test.dat", FileMode.Open, FileAccess.Read); 
По завершении работы с файлом его следует закрыть, вызвав метод Close().
Описание слайда:
Класс FileStream Например, в следующем примере кода файл test.dat открывается только для чтения: FileStream fin = new FileStream("test.dat", FileMode.Open, FileAccess.Read); По завершении работы с файлом его следует закрыть, вызвав метод Close().

Слайд 19





Класс FileStream
Классы File и FileInfо предоставляют методы OpenRead() и OpenWrite(), облегчающие создание объектов FileStream, например:
FileStream aFile = File.OpenRead("Data.txt");
 
Следующий код выполняет ту же функцию: 
FileInfo aFileInfo = new FileInfo("Data.txt"); 
FileStream aFile = aFileInfo.OpenRead();
Описание слайда:
Класс FileStream Классы File и FileInfо предоставляют методы OpenRead() и OpenWrite(), облегчающие создание объектов FileStream, например: FileStream aFile = File.OpenRead("Data.txt"); Следующий код выполняет ту же функцию: FileInfo aFileInfo = new FileInfo("Data.txt"); FileStream aFile = aFileInfo.OpenRead();

Слайд 20





Класс FileStream
В классе FileStream определены два метода для чтения байтов из файла: ReadByte() и Read(). 
int ReadByte();
int Read(byte[ ] array, int offset, int count);
Метод Read() считывает количество count байтов в массив array, начиная с элемента array[offset - смещение в байтах в массиве array]. 
Метод возвращает количество байтов, успешно считанных из файла.
Описание слайда:
Класс FileStream В классе FileStream определены два метода для чтения байтов из файла: ReadByte() и Read(). int ReadByte(); int Read(byte[ ] array, int offset, int count); Метод Read() считывает количество count байтов в массив array, начиная с элемента array[offset - смещение в байтах в массиве array]. Метод возвращает количество байтов, успешно считанных из файла.

Слайд 21





Пример 1
using System; 
using System.IO;                                   // 1
class ShowFile { 
   static void Main(string[] args) { 
     int i; 
     FileStream fin = null;                       // 2
     try {  
          fin = new FileStream("filebyte", FileMode.Open);                                // 3
Описание слайда:
Пример 1 using System; using System.IO; // 1 class ShowFile { static void Main(string[] args) { int i; FileStream fin = null; // 2 try { fin = new FileStream("filebyte", FileMode.Open); // 3

Слайд 22





Пример 1
       do { // читать байты до конца файла
            i = fin.ReadByte();                                // 4
            if (i != -1){
               Console.Write("код = " +i+ " символ = ");
               Console.WriteLine((char)i);
           }
        } while (i != -1);
     } catch(IOException exc) { 
          Console.WriteLine("Ошибка ввода-вывода:\n" + exc.Message);
          return; 
       }
Описание слайда:
Пример 1 do { // читать байты до конца файла i = fin.ReadByte(); // 4 if (i != -1){ Console.Write("код = " +i+ " символ = "); Console.WriteLine((char)i); } } while (i != -1); } catch(IOException exc) { Console.WriteLine("Ошибка ввода-вывода:\n" + exc.Message); return; }

Слайд 23





Пример 1
        catch(Exception exc){ 
             Console.WriteLine(exc.Message); 
   // обработать ошибку, если это возможно
  // еще раз сгенерировать необрабатываемые ИС 
        } 
           finally { 
              if (fin != null) fin.Close();                   // 5
          } 
    } 
}
Описание слайда:
Пример 1 catch(Exception exc){ Console.WriteLine(exc.Message); // обработать ошибку, если это возможно // еще раз сгенерировать необрабатываемые ИС } finally { if (fin != null) fin.Close(); // 5 } } }

Слайд 24





Порядок работы с файлом
1. Подключить пространство имен, в котором описываются стандартные классы для работы с файлами (оператор 1).
2. Объявить файловую переменную и связать ее с файлом на диске (операторы 2 и 3).
3. Выполнить операции ввода-вывода (оператор 4).
4. Закрыть файл (оператор 5).
Описание слайда:
Порядок работы с файлом 1. Подключить пространство имен, в котором описываются стандартные классы для работы с файлами (оператор 1). 2. Объявить файловую переменную и связать ее с файлом на диске (операторы 2 и 3). 3. Выполнить операции ввода-вывода (оператор 4). 4. Закрыть файл (оператор 5).

Слайд 25





Класс FileStream
Для записи байта в файл служит метод WriteByte():
void WriteByte(byte value);
Этот метод выполняет запись в файл байта, обозначаемого параметром value.
Для записи в файл целого массива байтов может быть вызван метод Write(): 
void Write(byte[] array, int offset, int count); 
Метод Write() записывает в файл количество count байтов из массива array, начиная с элемента array [offset - смещение в байтах в массиве array]. Метод возвращает количество байтов, успешно записанных в файл.
Описание слайда:
Класс FileStream Для записи байта в файл служит метод WriteByte(): void WriteByte(byte value); Этот метод выполняет запись в файл байта, обозначаемого параметром value. Для записи в файл целого массива байтов может быть вызван метод Write(): void Write(byte[] array, int offset, int count); Метод Write() записывает в файл количество count байтов из массива array, начиная с элемента array [offset - смещение в байтах в массиве array]. Метод возвращает количество байтов, успешно записанных в файл.

Слайд 26





Пример 2
using System; 
using System.IO; 
class CopyFile { 
  static void Main(string[] args) { 
    int i;           string si, sr;
    FileStream fin = null; 
    FileStream fout = null; 
    Console.Write("Введите имя исходного файла, который следует копировать:    "); 
    si =  Console.ReadLine();
    Console.Write("Введите имя выходного файла:    "); 
    sr =  Console.ReadLine();
Описание слайда:
Пример 2 using System; using System.IO; class CopyFile { static void Main(string[] args) { int i; string si, sr; FileStream fin = null; FileStream fout = null; Console.Write("Введите имя исходного файла, который следует копировать: "); si = Console.ReadLine(); Console.Write("Введите имя выходного файла: "); sr = Console.ReadLine();

Слайд 27





Пример 2
      try {   // открыть файлы
         fin = new FileStream(si , FileMode.Open); 
         fout = new FileStream(sr, FileMode.Create); 
         do {  // скопировать файл 
            i = fin.ReadByte(); 
            if (i != -1) fout.WriteByte((byte)i); 
        } while (i != -1);           
      } catch(IOException exc) { 
          Console.WriteLine("Ошибка ввода-вывода:\n"+exc.Message); 
        } finally { 
              if (fin != null) fin.Close(); 
              if (fout != null) fout.Close (); 
            }
     }
}
Описание слайда:
Пример 2 try { // открыть файлы fin = new FileStream(si , FileMode.Open); fout = new FileStream(sr, FileMode.Create); do { // скопировать файл i = fin.ReadByte(); if (i != -1) fout.WriteByte((byte)i); } while (i != -1); } catch(IOException exc) { Console.WriteLine("Ошибка ввода-вывода:\n"+exc.Message); } finally { if (fin != null) fin.Close(); if (fout != null) fout.Close (); } } }

Слайд 28





Пример 3
Console.WriteLine("Введите строку для записи в файл:");
string text = Console.ReadLine();
 // запись в файл
using (FileStream fstream = new FileStream(@"C:\SomeDir\noname\note.txt", FileMode.OpenOrCreate)){
    // преобразование строки в байты
    byte[] array = System.Text.Encoding.Default.GetBytes(text);
    // запись массива байтов в файл
    fstream.Write(array, 0, array.Length);
    Console.WriteLine("Текст записан в файл");
}
Описание слайда:
Пример 3 Console.WriteLine("Введите строку для записи в файл:"); string text = Console.ReadLine();  // запись в файл using (FileStream fstream = new FileStream(@"C:\SomeDir\noname\note.txt", FileMode.OpenOrCreate)){     // преобразование строки в байты byte[] array = System.Text.Encoding.Default.GetBytes(text);     // запись массива байтов в файл     fstream.Write(array, 0, array.Length);     Console.WriteLine("Текст записан в файл"); }

Слайд 29





Пример 3
// чтение из файла
using (FileStream fstream = File.OpenRead(@"C:\SomeDir\noname\note.txt")){
    // преобразование строки в байты
    byte[] array = new byte[fstream.Length];
    // считывание данных
    fstream.Read(array, 0, array.Length);
    // декодирование байтов в строку
    string textFromFile = System.Text.Encoding.Default.GetString(array);
    Console.WriteLine("Текст из файла: {0}", textFromFile);
} 
Console.ReadLine();
Описание слайда:
Пример 3 // чтение из файла using (FileStream fstream = File.OpenRead(@"C:\SomeDir\noname\note.txt")){     // преобразование строки в байты     byte[] array = new byte[fstream.Length];     // считывание данных     fstream.Read(array, 0, array.Length);     // декодирование байтов в строку     string textFromFile = System.Text.Encoding.Default.GetString(array);     Console.WriteLine("Текст из файла: {0}", textFromFile); }  Console.ReadLine();

Слайд 30





Файлы с произвольным доступом
метод Seek() позволяет установить указатель файла на любое место в файле: 
long Seek(long offset, SeekOrigin origin);
Курсор потока, с которого начинается чтение или запись, смещается вперед на значение offset относительно позиции, указанной в качестве второго параметра origin. Смещение может отрицательным, тогда курсор сдвигается назад, если положительное - то вперед.
В качестве origin может быть указано одно из приведенных ниже значений:
SeekOrigin.Begin              Поиск от начала файла
SeekOrigin.Current          Поиск от текущего положения 
SeekOrigin.End                 Поиск от конца файла
Описание слайда:
Файлы с произвольным доступом метод Seek() позволяет установить указатель файла на любое место в файле: long Seek(long offset, SeekOrigin origin); Курсор потока, с которого начинается чтение или запись, смещается вперед на значение offset относительно позиции, указанной в качестве второго параметра origin. Смещение может отрицательным, тогда курсор сдвигается назад, если положительное - то вперед. В качестве origin может быть указано одно из приведенных ниже значений: SeekOrigin.Begin Поиск от начала файла SeekOrigin.Current Поиск от текущего положения SeekOrigin.End Поиск от конца файла

Слайд 31





Пример 4
using System; 
using System.IO; 
class RandomAccessDemo { 
   static void Main() {
      FileStream f = null; 
      char ch; 
      try { 
         f = new FileStream("random.dat", FileMode.Create); 
         // записать английский алфавит в файл
         for (int i=0; i < 26; i++) f.WriteByte((byte)('A'+i)); 
         // считать отдельные буквы английского алфавита
         f.Seek(0, SeekOrigin.Begin); // найти первый байт 
         ch = (char) f.ReadByte (); 
         Console.WriteLine("Первая буква: " + ch);
Описание слайда:
Пример 4 using System; using System.IO; class RandomAccessDemo { static void Main() { FileStream f = null; char ch; try { f = new FileStream("random.dat", FileMode.Create); // записать английский алфавит в файл for (int i=0; i < 26; i++) f.WriteByte((byte)('A'+i)); // считать отдельные буквы английского алфавита f.Seek(0, SeekOrigin.Begin); // найти первый байт ch = (char) f.ReadByte (); Console.WriteLine("Первая буква: " + ch);

Слайд 32





Пример 4
        f.Seek(1, SeekOrigin.Begin); // найти второй байт 
         ch = (char) f. ReadByte (); 
         Console.WriteLine("Вторая буква: " + ch); 
         f.Seek(4, SeekOrigin.Begin); // найти пятый байт 
         ch = (char) f.ReadByte(); 
         Console.WriteLine("Пятая буква: " + ch); 
        // прочитать буквы английского алфавита через одну
        Console.WriteLine("Буквы алфавита через одну: "); 
        for (int i=0; i < 26; i += 2) { 
           f.Seek(i, SeekOrigin.Begin); // найти i-й символ 
           ch = (char) f.ReadByte(); 
           Console.Write(ch + " "); 
          } 
     }
Описание слайда:
Пример 4 f.Seek(1, SeekOrigin.Begin); // найти второй байт ch = (char) f. ReadByte (); Console.WriteLine("Вторая буква: " + ch); f.Seek(4, SeekOrigin.Begin); // найти пятый байт ch = (char) f.ReadByte(); Console.WriteLine("Пятая буква: " + ch); // прочитать буквы английского алфавита через одну Console.WriteLine("Буквы алфавита через одну: "); for (int i=0; i < 26; i += 2) { f.Seek(i, SeekOrigin.Begin); // найти i-й символ ch = (char) f.ReadByte(); Console.Write(ch + " "); } }

Слайд 33





Пример 4
       catch(IOException exc) { 
           Console.WriteLine("Ошибка ввода-вывода\n" + exc.Message); 
      } 
         finally { 
              if (f != null) f.Close(); 
              Console.WriteLine(); 
        }
   }
}
Описание слайда:
Пример 4 catch(IOException exc) { Console.WriteLine("Ошибка ввода-вывода\n" + exc.Message); } finally { if (f != null) f.Close(); Console.WriteLine(); } } }

Слайд 34





Пример 4
// прочитать буквы английского алфавита через одну
Console.WriteLine("Буквы алфавита через одну: ");   
for (int i=0; i < 26; i += 2) { 
      f.Position = i; // найти i-й символ 
                             // посредством свойства Position 
      ch = (char) f.ReadByte (); 
      Console.Write(ch + " "); 
}
Описание слайда:
Пример 4 // прочитать буквы английского алфавита через одну Console.WriteLine("Буквы алфавита через одну: "); for (int i=0; i < 26; i += 2) { f.Position = i; // найти i-й символ // посредством свойства Position ch = (char) f.ReadByte (); Console.Write(ch + " "); }

Слайд 35





Пример 5
using System.IO;
using System.Text; 
class Program{
   static void Main(string[] args){
     string text = "hello world";             
        // запись в файл
     using (FileStream fstream = new FileStream(@"D:\note.dat", FileMode.OpenOrCreate)){
     // преобразование строки в байты
     byte[] input = Encoding.Default.GetBytes(text);
Описание слайда:
Пример 5 using System.IO; using System.Text;  class Program{    static void Main(string[] args){      string text = "hello world";                      // запись в файл      using (FileStream fstream = new FileStream(@"D:\note.dat", FileMode.OpenOrCreate)){      // преобразование строки в байты      byte[] input = Encoding.Default.GetBytes(text);

Слайд 36





Пример 5
     // запись массива байтов в файл
     fstream.Write(input, 0, input.Length);
     Console.WriteLine("Текст записан в файл");
     // перемещение указателя в конец файла,
     // до конца файла- пять байт
      fstream.Seek(-5, SeekOrigin.End); 
            // минус 5 символов с конца потока
      // считывание четырех символов с текущей позиции
      byte[] output = new byte[4];
      fstream.Read(output, 0, output.Length);
     // декодирование байтов в строку
     string textFromFile = Encoding.Default.GetString(output);
Описание слайда:
Пример 5      // запись массива байтов в файл      fstream.Write(input, 0, input.Length);      Console.WriteLine("Текст записан в файл");      // перемещение указателя в конец файла, // до конца файла- пять байт       fstream.Seek(-5, SeekOrigin.End); // минус 5 символов с конца потока       // считывание четырех символов с текущей позиции       byte[] output = new byte[4];       fstream.Read(output, 0, output.Length);      // декодирование байтов в строку      string textFromFile = Encoding.Default.GetString(output);

Слайд 37





Пример 5
     Encoding.Default.GetString(output);
      Console.WriteLine("Текст из файла: {0}", textFromFile); // worl
    // замена в файле слова world на слово house
      string replaceText = "house";
     fstream.Seek(-5, SeekOrigin.End); 
                    // минус 5 символов с конца потока
     input = Encoding.Default.GetBytes(replaceText);
     fstream.Write(input, 0, input.Length);
      // считывание всего файла,
      // возвращение указателя в начало файла
      fstream.Seek(0, SeekOrigin.Begin);
Описание слайда:
Пример 5      Encoding.Default.GetString(output);       Console.WriteLine("Текст из файла: {0}", textFromFile); // worl     // замена в файле слова world на слово house       string replaceText = "house";      fstream.Seek(-5, SeekOrigin.End); // минус 5 символов с конца потока      input = Encoding.Default.GetBytes(replaceText);      fstream.Write(input, 0, input.Length);       // считывание всего файла,       // возвращение указателя в начало файла       fstream.Seek(0, SeekOrigin.Begin);

Слайд 38





Пример 5
      output = new byte[fstream.Length];
      fstream.Read(output, 0, output.Length);
      // декодирование байтов в строку
      textFromFile = Encoding.Default.GetString(output);
      Console.WriteLine("Текст из файла: {0}", textFromFile); // hello house
        }
        Console.Read();
    }
}
Описание слайда:
Пример 5       output = new byte[fstream.Length];       fstream.Read(output, 0, output.Length);       // декодирование байтов в строку       textFromFile = Encoding.Default.GetString(output);       Console.WriteLine("Текст из файла: {0}", textFromFile); // hello house         }         Console.Read();     } }

Слайд 39





Пример 5
     
Описание слайда:
Пример 5      

Слайд 40





Пример 6
using System; 
using System.Collections.Generic; 
using System.Ling; 
using System.Text; 
using System.IO; 
...
static void Main(string[] args) { 
     byte[] byData = new byte[200]; 
     char[] charData = new Char [200]; 
     try  { 
           FileStream aFile = new FileStream("../../Program.cs", FileMode.Open) 
           aFile.Seek(113, SeekOrigin.Begin); 
           aFile.Read(byData, 0, 200); 
     }
Описание слайда:
Пример 6 using System; using System.Collections.Generic; using System.Ling; using System.Text; using System.IO; ... static void Main(string[] args) { byte[] byData = new byte[200]; char[] charData = new Char [200]; try { FileStream aFile = new FileStream("../../Program.cs", FileMode.Open) aFile.Seek(113, SeekOrigin.Begin); aFile.Read(byData, 0, 200); }

Слайд 41





Пример 6
      catch(IOException e) { 
         Console.WriteLine("Сгенерировано исключение ввода-вывода!"); 
         Console.WriteLine(e.ToString ()); 
         Console.ReadKey(); 
         return; 
     }             
     Decoder d = Encoding.UTF8.GetDecoder();
     d.GetChars(byData, 0, byData.Length, charData, 0); 
     Console.WriteLine(charData); 
     Console.ReadKey(); 
}
Описание слайда:
Пример 6 catch(IOException e) { Console.WriteLine("Сгенерировано исключение ввода-вывода!"); Console.WriteLine(e.ToString ()); Console.ReadKey(); return; }              Decoder d = Encoding.UTF8.GetDecoder(); d.GetChars(byData, 0, byData.Length, charData, 0); Console.WriteLine(charData); Console.ReadKey(); }

Слайд 42





Пример 7
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System. IO; 
...
static void Main(string[] args) { 
   byte[] byData; 
   char[] charData; 
   try { 
     FileStream aFile = new FileStream("Temp.txt", FileMode.Create); 
     charData="Скоро Новый год!!!".ToCharArray(); 
     byData = new byte[charData.Length*2]; 
     Encoder e = Encoding.UTF8.GetEncoder();
Описание слайда:
Пример 7 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System. IO; ... static void Main(string[] args) { byte[] byData; char[] charData; try { FileStream aFile = new FileStream("Temp.txt", FileMode.Create); charData="Скоро Новый год!!!".ToCharArray(); byData = new byte[charData.Length*2]; Encoder e = Encoding.UTF8.GetEncoder();

Слайд 43





Пример 7
       e.GetBytes(charData, 0, charData.Length, byData, 0, true); 
    // переместить файловый указатель в начало файла
       aFile.Seek(0, SeekOrigin.Begin); 
       aFile.Write(byData, 0, byData.Length); 
  } catch (IOException ex) { 
       Console.WriteLine("Сгенерировано исключение ввода-вывода!"); 
       Console.WriteLine (ex.ToString()); 
       Console.ReadKey(); 
       return; 
   } 
}
Описание слайда:
Пример 7 e.GetBytes(charData, 0, charData.Length, byData, 0, true); // переместить файловый указатель в начало файла aFile.Seek(0, SeekOrigin.Begin); aFile.Write(byData, 0, byData.Length); } catch (IOException ex) { Console.WriteLine("Сгенерировано исключение ввода-вывода!"); Console.WriteLine (ex.ToString()); Console.ReadKey(); return; } }

Слайд 44





Символьный ввод-вывод в файл
Несмотря на то что файлы часто обрабатываются побайтово, для этой цели можно воспользоваться также символьными потоками. 
Преимущество символьных потоков заключается в том, что они оперируют символами непосредственно в уникоде.
На вершине иерархии классов символьных потоков находятся абстрактные классы TextReader (организует ввод) и TextWriter (организует вывод).
Описание слайда:
Символьный ввод-вывод в файл Несмотря на то что файлы часто обрабатываются побайтово, для этой цели можно воспользоваться также символьными потоками. Преимущество символьных потоков заключается в том, что они оперируют символами непосредственно в уникоде. На вершине иерархии классов символьных потоков находятся абстрактные классы TextReader (организует ввод) и TextWriter (организует вывод).

Слайд 45





Класс TextReader
Описание слайда:
Класс TextReader

Слайд 46





Класс TextReader
Описание слайда:
Класс TextReader

Слайд 47





Класс TextWriter
Для записи в текстовый файл используется класс TextWriter. Свою функциональность он реализует через следующие методы:
- Close: закрывает записываемый файл и освобождает все ресурсы.
- Flush: записывает в файл оставшиеся в буфере данные и очищает буфер.
- Write: записывает в файл данные простейших типов, как int, double, char, string и т.д.
- WriteLine: также записывает данные, только после записи добавляет в файл символ окончания строки.
Описание слайда:
Класс TextWriter Для записи в текстовый файл используется класс TextWriter. Свою функциональность он реализует через следующие методы: - Close: закрывает записываемый файл и освобождает все ресурсы. - Flush: записывает в файл оставшиеся в буфере данные и очищает буфер. - Write: записывает в файл данные простейших типов, как int, double, char, string и т.д. - WriteLine: также записывает данные, только после записи добавляет в файл символ окончания строки.

Слайд 48





Символьный ввод-вывод в файл
Классы TextReader и TextWriter реализуются несколькими классами символьных потоков:
StreamReader      Предназначен для ввода символов из байтового потока. Этот класс является оболочкой для байтового потока ввода 
StreamWriter      Предназначен для вывода символов в байтовый поток. Этот класс является оболочкой для байтового потока вывода 
StringReader       Предназначен для ввода символов из символьной строки 
StringWriter        Предназначен для вывода символов в символьную строку
Описание слайда:
Символьный ввод-вывод в файл Классы TextReader и TextWriter реализуются несколькими классами символьных потоков: StreamReader Предназначен для ввода символов из байтового потока. Этот класс является оболочкой для байтового потока ввода StreamWriter Предназначен для вывода символов в байтовый поток. Этот класс является оболочкой для байтового потока вывода StringReader Предназначен для ввода символов из символьной строки StringWriter Предназначен для вывода символов в символьную строку

Слайд 49





Символьный ввод-вывод в файл
Для выполнения операций символьного ввода-вывода в файлы объект класса FileStream заключается в оболочку класса StreamReader или StreamWriter. В этих классах выполняется автоматическое преобразование байтового потока в символьный и наоборот. 
Класс StreamWriter является производным от класса TextWriter, а класс StreamReader — производным от класса TextReader. Следовательно, в классах StreamReader и StreamWriter доступны методы и свойства, определенные в их базовых классах.
Описание слайда:
Символьный ввод-вывод в файл Для выполнения операций символьного ввода-вывода в файлы объект класса FileStream заключается в оболочку класса StreamReader или StreamWriter. В этих классах выполняется автоматическое преобразование байтового потока в символьный и наоборот. Класс StreamWriter является производным от класса TextWriter, а класс StreamReader — производным от класса TextReader. Следовательно, в классах StreamReader и StreamWriter доступны методы и свойства, определенные в их базовых классах.

Слайд 50





Применение класса StreamWriter
Существует много способов создания объекта StreamWriter. 
Если объект FileStream уже имеется, можно использовать следующее для создания StreamWriter (1 способ): 
FileStream aFile = new FileStream("Log.txt", FileMode.CreateNew); 
StreamWriter sw = new StreamWriter(aFile); 
 Объект StreamWriter можно также создать непосредственно из файла (2 способ): 
StreamWriter sw = new StreamWriter("Log.txt", true);
Описание слайда:
Применение класса StreamWriter Существует много способов создания объекта StreamWriter. Если объект FileStream уже имеется, можно использовать следующее для создания StreamWriter (1 способ): FileStream aFile = new FileStream("Log.txt", FileMode.CreateNew); StreamWriter sw = new StreamWriter(aFile);  Объект StreamWriter можно также создать непосредственно из файла (2 способ): StreamWriter sw = new StreamWriter("Log.txt", true);

Слайд 51





Пример 8 (1 способ)
using System; 
using System.IO; 
class KtoD { 
   static void Main() { 
     string str; 
     FileStream fout;                                                      // 1
    // открыть сначала поток файлового ввода-вывода
    try { 
       fout = new FileStream("test.txt", FileMode.Create); // 2
    }  catch(IOException exc) { 
          Console.WriteLine("Ошибка открытия файла:\n" + exc.Message); 
           return; 
      }
Описание слайда:
Пример 8 (1 способ) using System; using System.IO; class KtoD { static void Main() { string str; FileStream fout; // 1 // открыть сначала поток файлового ввода-вывода try { fout = new FileStream("test.txt", FileMode.Create); // 2 } catch(IOException exc) { Console.WriteLine("Ошибка открытия файла:\n" + exc.Message); return; }

Слайд 52





Пример 8 (1 способ)
    // заключить поток файлового ввода-вывода в 
    // оболочку класса StreamWriter
     StreamWriter fstr_out = new StreamWriter(fout);   // 3
    try { 
        Console.WriteLine("Введите текст, а по окончании - 'стоп'."); 
       do { 
           Console.Write(": "); 
           str = Console.ReadLine(); 
           if (str != "стоп") { 
              str = str + "\r\n"; // добавить новую строку 
              fstr_out.Write(str); 
          } 
      } while(str != "стоп"); 
    }
Описание слайда:
Пример 8 (1 способ) // заключить поток файлового ввода-вывода в // оболочку класса StreamWriter StreamWriter fstr_out = new StreamWriter(fout); // 3 try { Console.WriteLine("Введите текст, а по окончании - 'стоп'."); do { Console.Write(": "); str = Console.ReadLine(); if (str != "стоп") { str = str + "\r\n"; // добавить новую строку fstr_out.Write(str); } } while(str != "стоп"); }

Слайд 53





Пример 8 (1 способ)
       catch(IOException exc) { 
          Console.WriteLine("Ошибка ввода-вывода:\n" + exc.Message); 
       } finally { 
              fstr_out.Close(); 
         } 
   } 
}
Описание слайда:
Пример 8 (1 способ) catch(IOException exc) { Console.WriteLine("Ошибка ввода-вывода:\n" + exc.Message); } finally { fstr_out.Close(); } } }

Слайд 54





Пример 9 (2 способ)
using System; 
using System.IO; 
class KtoD { 
  static void Main() { 
    string str; 
    StreamWriter fstr_out = null;                         // 1
    try { 
       // открыть файл, заключенный в оболочку
       //  класса StreamWriter
        fstr_out = new StreamWriter("test.txt");   // 2
        Console.WriteLine("Введите текст, а по окончании - 'стоп'.");
Описание слайда:
Пример 9 (2 способ) using System; using System.IO; class KtoD { static void Main() { string str; StreamWriter fstr_out = null; // 1 try { // открыть файл, заключенный в оболочку // класса StreamWriter fstr_out = new StreamWriter("test.txt"); // 2 Console.WriteLine("Введите текст, а по окончании - 'стоп'.");

Слайд 55





Пример 9 (2 способ)
       do { 
           Console.Write(": "); 
           str = Console.ReadLine(); 
           if (str != "стоп") { 
             str = str + "\r\n"; // добавить новую строку 
             fstr_out.Write(str); 
         } 
      } while(str != "стоп"); 
   } catch(IOException exc) { 
        Console.WriteLine("Ошибка ввода-вывода:\n" + exc.Message); 
      } finally { if (fstr_out != null) fstr_out.Close();  } 
     } 
}
Описание слайда:
Пример 9 (2 способ) do { Console.Write(": "); str = Console.ReadLine(); if (str != "стоп") { str = str + "\r\n"; // добавить новую строку fstr_out.Write(str); } } while(str != "стоп"); } catch(IOException exc) { Console.WriteLine("Ошибка ввода-вывода:\n" + exc.Message); } finally { if (fstr_out != null) fstr_out.Close(); } } }

Слайд 56





Применение класса StreamReader
Чтобы создать экземпляр класса StreamReader, можно сначала создать объект FileInfо и затем вызвать его метод OpenText() (0 способ): 
FileInfo theSourceFile = new FileInfo (@"C:\test\test1.cs"); 
StreamReader stream = theSourceFile.OpenText(); 
Наиболее распространенный способ его создания — применение ранее созданного объекта FileStream (1 способ): 
FileStream aFile = new FileStream("Log.txt", FileMode.Open); 
StreamReader sr = new StreamReader(aFile); 
Подобно StreamWriter, объект класса StreamReader может быть создан непосредственно из строки, содержащей путь к определенному файлу (2 способ): 
StreamReader sr = new StreamReader("Log.txt");
Описание слайда:
Применение класса StreamReader Чтобы создать экземпляр класса StreamReader, можно сначала создать объект FileInfо и затем вызвать его метод OpenText() (0 способ): FileInfo theSourceFile = new FileInfo (@"C:\test\test1.cs"); StreamReader stream = theSourceFile.OpenText(); Наиболее распространенный способ его создания — применение ранее созданного объекта FileStream (1 способ): FileStream aFile = new FileStream("Log.txt", FileMode.Open); StreamReader sr = new StreamReader(aFile); Подобно StreamWriter, объект класса StreamReader может быть создан непосредственно из строки, содержащей путь к определенному файлу (2 способ): StreamReader sr = new StreamReader("Log.txt");

Слайд 57





Пример 10
using System; 
using System.IO; 
class DtoS { 
   static void Main() { 
     StreamReader fstr_in; 
     string s;
     try  {
     // открыть файл, заключенный в оболочку класса StreamReader
          fstr_in = new StreamReader("test.txt");
     } catch (IOException exc)  {
          Console.WriteLine("Ошибка открытия файла:\n" + exc.Message);
           return;
       }
Описание слайда:
Пример 10 using System; using System.IO; class DtoS { static void Main() { StreamReader fstr_in; string s; try { // открыть файл, заключенный в оболочку класса StreamReader fstr_in = new StreamReader("test.txt"); } catch (IOException exc) { Console.WriteLine("Ошибка открытия файла:\n" + exc.Message); return; }

Слайд 58





Пример 10
      try {
           while ((s = fstr_in.ReadLine()) != null) {
                Console.WriteLine(s);
           }
      }  catch (IOException exc)  {
             Console.WriteLine("Ошибка ввода-вывода:\n" + exc.Message);
        }  finally  {
               fstr_in.Close();
         }
     } 
}
Описание слайда:
Пример 10 try { while ((s = fstr_in.ReadLine()) != null) { Console.WriteLine(s); } } catch (IOException exc) { Console.WriteLine("Ошибка ввода-вывода:\n" + exc.Message); } finally { fstr_in.Close(); } } }

Слайд 59





Способы считывания текста из файла
1. Построчный ввод можно организовать с помощью оператора using.
    Console.WriteLine("******считывается файл построчно + using********");
        string s;
    using (StreamReader sr = new StreamReader("test.txt", System.Text.Encoding.Default))  {
         while ((s = fstr_in.ReadLine()) != null) {
               Console.WriteLine(s);
         }
    }
Описание слайда:
Способы считывания текста из файла 1. Построчный ввод можно организовать с помощью оператора using.     Console.WriteLine("******считывается файл построчно + using********"); string s;     using (StreamReader sr = new StreamReader("test.txt", System.Text.Encoding.Default))  {          while ((s = fstr_in.ReadLine()) != null) { Console.WriteLine(s); }     }

Слайд 60





Способы считывания текста из файла
2.  Console.WriteLine("******считывается файл посимвольно********");
StreamReader fstr_in = new StreamReader(fin); 
int nChar; 
try {   nChar = fstr_in.Read(); 
           while(nChar != -1) { 
                Console.Write(Convert.ToChar(nChar)); 
                nChar = fstr_in.Read(); 
           }
}  catch (IOException exc)  {
     Console.WriteLine("Ошибка ввода-вывода:\n" + exc.Message);
  }  finally  {
         fstr_in.Close();
  }
Описание слайда:
Способы считывания текста из файла 2.  Console.WriteLine("******считывается файл посимвольно********"); StreamReader fstr_in = new StreamReader(fin); int nChar; try { nChar = fstr_in.Read(); while(nChar != -1) { Console.Write(Convert.ToChar(nChar)); nChar = fstr_in.Read(); } } catch (IOException exc) { Console.WriteLine("Ошибка ввода-вывода:\n" + exc.Message); } finally { fstr_in.Close(); }

Слайд 61





Способы считывания текста из файла
3. Символы можно считывать блоками.
Console.WriteLine("******считывается файл блоками********");
using (StreamReader fstr_in = new StreamReader("test.txt", System.Text.Encoding.Default)){
        char[] array = new char[4];
        // считывается 4 символа
        fstr_in.Read(array, 0, 4); 
        Console.WriteLine(array);           
}
Описание слайда:
Способы считывания текста из файла 3. Символы можно считывать блоками. Console.WriteLine("******считывается файл блоками********"); using (StreamReader fstr_in = new StreamReader("test.txt", System.Text.Encoding.Default)){       char[] array = new char[4];       // считывается 4 символа       fstr_in.Read(array, 0, 4);        Console.WriteLine(array);           }

Слайд 62





Способы считывания текста из файла
4. Очень удобен при работе с небольшими файлами метод ReadToEnd(). Он читает весь файл целиком и возвращает его содержимое в виде строки. 
Console.WriteLine("******считывается весь файл********");
using (StreamReader fstr_in = new StreamReader(fin)){
       Console.WriteLine(fstr_inr.ReadToEnd());
}
 Хотя это может показаться простым и удобным, следует соблюдать осторожность, читая все данные в строковый объект и помещая их все в память. В зависимости от размера этих данных это может быть крайне нежелательно.
Описание слайда:
Способы считывания текста из файла 4. Очень удобен при работе с небольшими файлами метод ReadToEnd(). Он читает весь файл целиком и возвращает его содержимое в виде строки. Console.WriteLine("******считывается весь файл********"); using (StreamReader fstr_in = new StreamReader(fin)){        Console.WriteLine(fstr_inr.ReadToEnd()); }  Хотя это может показаться простым и удобным, следует соблюдать осторожность, читая все данные в строковый объект и помещая их все в память. В зависимости от размера этих данных это может быть крайне нежелательно.

Слайд 63





Способы считывания текста из файла
5. С применением функций преобразования типов
StreamReader f = new StreamReader( "d:\\C#\\input.txt" );
string s = f.ReadLine();
Console.WriteLine( "s = " + s );
char  c = (char)f.Read();
f.ReadLine();
Console.WriteLine( "c = " + c );
string buf;
buf = f.ReadLine();
int i = Convert.ToInt32( buf );
Console.WriteLine( i );
Описание слайда:
Способы считывания текста из файла 5. С применением функций преобразования типов StreamReader f = new StreamReader( "d:\\C#\\input.txt" ); string s = f.ReadLine(); Console.WriteLine( "s = " + s ); char c = (char)f.Read(); f.ReadLine(); Console.WriteLine( "c = " + c ); string buf; buf = f.ReadLine(); int i = Convert.ToInt32( buf ); Console.WriteLine( i );

Слайд 64





Способы считывания текста из файла
5. С применением функций преобразования типов
buf = f.ReadLine();
double x = Convert.ToDouble( buf );
Console.WriteLine( x );
buf = f.ReadLine();
double y = double.Parse( buf );
Console.WriteLine( y );
buf = f.ReadLine();
decimal z = decimal.Parse( buf );
Console.WriteLine( z );
f.Close();
Описание слайда:
Способы считывания текста из файла 5. С применением функций преобразования типов buf = f.ReadLine(); double x = Convert.ToDouble( buf ); Console.WriteLine( x ); buf = f.ReadLine(); double y = double.Parse( buf ); Console.WriteLine( y ); buf = f.ReadLine(); decimal z = decimal.Parse( buf ); Console.WriteLine( z ); f.Close();

Слайд 65





Применение класса MemoryStream
Иногда оказывается полезно читать вводимые данные из массива или записывать выводимые данные в массив, а не вводить их непосредственно из устройства или выводить прямо на него. Для этой цели служит класс MemoryStream. Один из конструкторов класса: MemoryStream(byte[ ] buffer); 
где buffer обозначает массив байтов, используемый в качестве источника или адресата в запросах ввода-вывода. Массив buffer должен быть достаточно большим для хранения направляемых в него данных.
Описание слайда:
Применение класса MemoryStream Иногда оказывается полезно читать вводимые данные из массива или записывать выводимые данные в массив, а не вводить их непосредственно из устройства или выводить прямо на него. Для этой цели служит класс MemoryStream. Один из конструкторов класса: MemoryStream(byte[ ] buffer); где buffer обозначает массив байтов, используемый в качестве источника или адресата в запросах ввода-вывода. Массив buffer должен быть достаточно большим для хранения направляемых в него данных.

Слайд 66





Пример 11
using System; 
using System.IO; 
class MemStrDemo { 
   static void Main() { 
     byte[] storage = new byte[255]; 
     // создать запоминающий поток
    MemoryStream memstrm = new MemoryStream(storage); 
    // заключить объект memstrm в оболочки классов 
    // чтения и записи данных в потоки
     StreamWriter memwtr = new StreamWriter(memstrm); 
     StreamReader memrdr = new StreamReader(memstrm);
Описание слайда:
Пример 11 using System; using System.IO; class MemStrDemo { static void Main() { byte[] storage = new byte[255]; // создать запоминающий поток MemoryStream memstrm = new MemoryStream(storage); // заключить объект memstrm в оболочки классов // чтения и записи данных в потоки StreamWriter memwtr = new StreamWriter(memstrm); StreamReader memrdr = new StreamReader(memstrm);

Слайд 67





Пример 11
     try { 
          // записать данные в память, используя объект memwtr
         for (int i=0; i < 10; i++) 
           memwtr.WriteLine("byte [" + i +"]:"+ i); 
           // поставить в конце точку
           memwtr.WriteLine("."); 
           memwtr.Flush(); 
           Console.WriteLine("Чтение прямо из массива storage: "); 
           // отобразить содержимое массива storage непосредственно
          foreach (char ch in storage) { 
              if (ch == '.') break; 
              Console.Write (ch); 
          } 
          Console.WriteLine("\nЧтение из потока с помощью объекта memrdr: ");
Описание слайда:
Пример 11 try { // записать данные в память, используя объект memwtr for (int i=0; i < 10; i++) memwtr.WriteLine("byte [" + i +"]:"+ i); // поставить в конце точку memwtr.WriteLine("."); memwtr.Flush(); Console.WriteLine("Чтение прямо из массива storage: "); // отобразить содержимое массива storage непосредственно foreach (char ch in storage) { if (ch == '.') break; Console.Write (ch); } Console.WriteLine("\nЧтение из потока с помощью объекта memrdr: ");

Слайд 68





Пример 11
         memstrm.Seek(0, SeekOrigin.Begin); 
          string str = memrdr.ReadLine(); 
          while(str != null) { 
              str = memrdr.ReadLine(); 
              if (str [0] == '.') break; 
              Console. WriteLine (str); 
          } 
    } catch(IOException exc) { 
         Console.WriteLine("Ошибка ввода-вывода\n" + exc.Message); 
    } finally { 
 // освободить ресурсы считывающего и записывающего потоков 
          memwtr.Close();    memrdr.Close(); 
      } 
   } 
}
Описание слайда:
Пример 11 memstrm.Seek(0, SeekOrigin.Begin); string str = memrdr.ReadLine(); while(str != null) { str = memrdr.ReadLine(); if (str [0] == '.') break; Console. WriteLine (str); } } catch(IOException exc) { Console.WriteLine("Ошибка ввода-вывода\n" + exc.Message); } finally { // освободить ресурсы считывающего и записывающего потоков memwtr.Close(); memrdr.Close(); } } }

Слайд 69





Применение классов StringReader и StringWriter
Для выполнения операций ввода-вывода с запоминанием в некоторых приложениях в качестве базовой памяти иногда лучше использовать массив типа string, чем массив типа byte. Именно для таких случаев и предусмотрены классы StringReader и StringWriter. В частности, класс StringReader наследует от класса TextReader, а класс StringWriter — от класса TextWriter.
Описание слайда:
Применение классов StringReader и StringWriter Для выполнения операций ввода-вывода с запоминанием в некоторых приложениях в качестве базовой памяти иногда лучше использовать массив типа string, чем массив типа byte. Именно для таких случаев и предусмотрены классы StringReader и StringWriter. В частности, класс StringReader наследует от класса TextReader, а класс StringWriter — от класса TextWriter.

Слайд 70





Пример 12
using System; 
using System.IO; 
class StrRdrWtrDemo { 
   static void Main() { 
       StringWriter strwtr = null; 
       StringReader strrdr = null; 
       try { 
         // создать объект класса StringWriter
         strwtr = new StringWriter(); 
     // вывести данные в записывающий поток типа StringWriter
         for (int i=0; i < 10; i++) 
            strwtr.WriteLine("Значение i равно: " + i); 
     // создать объект класса StringReader
        strrdr = new StringReader(strwtr.ToString());
Описание слайда:
Пример 12 using System; using System.IO; class StrRdrWtrDemo { static void Main() { StringWriter strwtr = null; StringReader strrdr = null; try { // создать объект класса StringWriter strwtr = new StringWriter(); // вывести данные в записывающий поток типа StringWriter for (int i=0; i < 10; i++) strwtr.WriteLine("Значение i равно: " + i); // создать объект класса StringReader strrdr = new StringReader(strwtr.ToString());

Слайд 71





Пример 12
   // ввести данные из считывающего потока типа StringReader
        string str = strrdr.ReadLine(); 
        while (str != null) { 
             str = strrdr.ReadLine(); 
             Console.WriteLine(str); 
        } 
     } catch (IOException exc) { 
         Console.WriteLine("Ошибка ввода-вывода\n" + exc.Message); 
     } finally { 
   // освободить ресурсы считывающего и записывающего потоков
        if (strrdr != null) strrdr.Close(); 
        if (strwtr != null) strwtr.Close(); 
     } 
  } 
}
Описание слайда:
Пример 12 // ввести данные из считывающего потока типа StringReader string str = strrdr.ReadLine(); while (str != null) { str = strrdr.ReadLine(); Console.WriteLine(str); } } catch (IOException exc) { Console.WriteLine("Ошибка ввода-вывода\n" + exc.Message); } finally { // освободить ресурсы считывающего и записывающего потоков if (strrdr != null) strrdr.Close(); if (strwtr != null) strwtr.Close(); } } }

Слайд 72





Переадресация стандартных потоков
Для всех программ, в которых используется пространство имен System, доступны встроенные потоки, открывающиеся с помощью свойств Console.In - связано с потоком ввода, Console.Out - связано с потоком вывода и Console.Error - связано со стандартным потоком сообщений об ошибках, которые по умолчанию также выводятся на консоль. 
Но эти потоки могут быть переадресованы на любое другое совместимое устройство ввода-вывода. И чаще всего они переадресовываются в файл. 
Переадресацию стандартных потоков можно осуществлять под управлением самой программы с помощью методов SetIn(), SetOut() и SetError(), являющихся членами класса Console.
Описание слайда:
Переадресация стандартных потоков Для всех программ, в которых используется пространство имен System, доступны встроенные потоки, открывающиеся с помощью свойств Console.In - связано с потоком ввода, Console.Out - связано с потоком вывода и Console.Error - связано со стандартным потоком сообщений об ошибках, которые по умолчанию также выводятся на консоль. Но эти потоки могут быть переадресованы на любое другое совместимое устройство ввода-вывода. И чаще всего они переадресовываются в файл. Переадресацию стандартных потоков можно осуществлять под управлением самой программы с помощью методов SetIn(), SetOut() и SetError(), являющихся членами класса Console.

Слайд 73





Пример 13
using System; 
using System.IO; 
class Redirect { 
    static void Main() { 
      StreamWriter log_out = null; 
      try { 
          log_out = new StreamWriter("logfile.txt"); 
            // переадресовать стандартный вывод в файл logfile.txt
          Console.SetOut(log_out); 
          Console.WriteLine("Это начало файла журнала регистрации."); 
         for (int i=0; i<10; i++)  Console.WriteLine(i);
Описание слайда:
Пример 13 using System; using System.IO; class Redirect { static void Main() { StreamWriter log_out = null; try { log_out = new StreamWriter("logfile.txt"); // переадресовать стандартный вывод в файл logfile.txt Console.SetOut(log_out); Console.WriteLine("Это начало файла журнала регистрации."); for (int i=0; i<10; i++) Console.WriteLine(i);

Слайд 74





Пример 13
    Console.WriteLine("Это конец файла журнала регистрации."); 
     } catch(IOException exc) { 
           Console.WriteLine("Ошибка ввода-вывода\n" + exc.Message); 
     } finally { 
           if (log_out != null) log_out.Close(); 
      } 
   } 
}
Описание слайда:
Пример 13 Console.WriteLine("Это конец файла журнала регистрации."); } catch(IOException exc) { Console.WriteLine("Ошибка ввода-вывода\n" + exc.Message); } finally { if (log_out != null) log_out.Close(); } } }

Слайд 75





Чтение и запись двоичных данных
В С# имеется также возможность читать и записывать другие типы данных. Например, можно создать файл, содержащий данные типа int, double или short. Для чтения и записи двоичных значений встроенных типов данных служат классы потоков BinaryReader и BinaryWriter. 
Используя эти потоки, следует иметь в виду, что данные считываются и записываются во внутреннем двоичном формате, а не в удобочитаемой текстовой форме.
Описание слайда:
Чтение и запись двоичных данных В С# имеется также возможность читать и записывать другие типы данных. Например, можно создать файл, содержащий данные типа int, double или short. Для чтения и записи двоичных значений встроенных типов данных служат классы потоков BinaryReader и BinaryWriter. Используя эти потоки, следует иметь в виду, что данные считываются и записываются во внутреннем двоичном формате, а не в удобочитаемой текстовой форме.

Слайд 76





Класс BinaryWriter
Класс BinaryWriter служит оболочкой, в которую заключается байтовый поток, управляющий выводом двоичных данных. Наиболее часто употребляемый конструктор этого класса:  BinaryWriter(Stream output); 
где output обозначает поток, в который выводятся записываемые данные. Для записи в выходной файл в качестве параметра output может быть указан объект, создаваемый средствами класса FileStream. 
Наиболее часто используемые методы, определенные в классе BinaryWriter: Write(value), Seek(), Close() и Flush().
Описание слайда:
Класс BinaryWriter Класс BinaryWriter служит оболочкой, в которую заключается байтовый поток, управляющий выводом двоичных данных. Наиболее часто употребляемый конструктор этого класса: BinaryWriter(Stream output); где output обозначает поток, в который выводятся записываемые данные. Для записи в выходной файл в качестве параметра output может быть указан объект, создаваемый средствами класса FileStream. Наиболее часто используемые методы, определенные в классе BinaryWriter: Write(value), Seek(), Close() и Flush().

Слайд 77





Класс BinaryReader
Класс BinaryReader служит оболочкой, в которую заключается байтовый поток, управляющий вводом двоичных данных. Наиболее часто употребляемый конструктор этого класса: BinaryReader(Stream input); 
где input обозначает поток, из которого вводятся считываемые данные. Для чтения из входного файла в качестве параметра input может быть указан объект, создаваемый средствами класса FileStream.
Описание слайда:
Класс BinaryReader Класс BinaryReader служит оболочкой, в которую заключается байтовый поток, управляющий вводом двоичных данных. Наиболее часто употребляемый конструктор этого класса: BinaryReader(Stream input); где input обозначает поток, из которого вводятся считываемые данные. Для чтения из входного файла в качестве параметра input может быть указан объект, создаваемый средствами класса FileStream.

Слайд 78





Класс BinaryReader
Наиболее часто используемые методы, определенные в классе BinaryReader: 
bool ReadBoolean(), byte ReadByte(), sbyte ReadSByte(), byte [ ] ReadBytes(int count), char ReadChar(), char [ ] ReadChars(int count), decimal ReadDecimal(), double ReadDouble(), float ReadSingle(), short ReadIntl6(), int ReadInt32(), long ReadInt64(), ushort ReadUIntl6(), uint ReadUInt32(), ulong ReadUInt64(), string ReadString()
int Read()
int Read(byte [] buffer, int offset, int count)
int Read(char[]buffer, int offset, int count)
Описание слайда:
Класс BinaryReader Наиболее часто используемые методы, определенные в классе BinaryReader: bool ReadBoolean(), byte ReadByte(), sbyte ReadSByte(), byte [ ] ReadBytes(int count), char ReadChar(), char [ ] ReadChars(int count), decimal ReadDecimal(), double ReadDouble(), float ReadSingle(), short ReadIntl6(), int ReadInt32(), long ReadInt64(), ushort ReadUIntl6(), uint ReadUInt32(), ulong ReadUInt64(), string ReadString() int Read() int Read(byte [] buffer, int offset, int count) int Read(char[]buffer, int offset, int count)

Слайд 79





Пример 14
using System; 
using System.IO; 
class RWData { 
    static void Main() { 
        BinaryWriter dataOut; 
        BinaryReader dataIn; 
        int i = 10; 
        double d = 1023.56; 
        bool b = true; 
        string str = "Это тест";
Описание слайда:
Пример 14 using System; using System.IO; class RWData { static void Main() { BinaryWriter dataOut; BinaryReader dataIn; int i = 10; double d = 1023.56; bool b = true; string str = "Это тест";

Слайд 80





Пример 14
      // открыть файл для вывода
       try { 
             dataOut = new BinaryWriter(new FileStream("testdata", FileMode.Create)); 
      } catch(IOException exc) { 
            Console.WriteLine("Ошибка открытия файла:\n" + exc.Message); 
            return; 
     }
Описание слайда:
Пример 14 // открыть файл для вывода try { dataOut = new BinaryWriter(new FileStream("testdata", FileMode.Create)); } catch(IOException exc) { Console.WriteLine("Ошибка открытия файла:\n" + exc.Message); return; }

Слайд 81





Пример 14
      try {  // записать данные в файл
           Console.WriteLine("Запись " + i) ; 
           dataOut.Write(i) ; 
           Console.WriteLine("Запись " + d); 
           dataOut.Write(d); 
           Console.WriteLine("Запись " + b); 
           dataOut.Write(b); 
           Console.WriteLine("Запись " + 12.2 * 7.4); 
           dataOut.Write(12.2 * 7.4); 
           Console.WriteLine("Запись " + str); 
           dataOut.Write(str); 
      }
Описание слайда:
Пример 14 try { // записать данные в файл Console.WriteLine("Запись " + i) ; dataOut.Write(i) ; Console.WriteLine("Запись " + d); dataOut.Write(d); Console.WriteLine("Запись " + b); dataOut.Write(b); Console.WriteLine("Запись " + 12.2 * 7.4); dataOut.Write(12.2 * 7.4); Console.WriteLine("Запись " + str); dataOut.Write(str); }

Слайд 82





Пример 14
      catch(IOException exc) { 
           Console.WriteLine("Ошибка ввода-вывода:\n" + exc.Message); 
       } finally { 
            dataOut.Close(); 
            Console.WriteLine(); 
      }
Описание слайда:
Пример 14 catch(IOException exc) { Console.WriteLine("Ошибка ввода-вывода:\n" + exc.Message); } finally { dataOut.Close(); Console.WriteLine(); }

Слайд 83





Пример 14
     // прочитать данные из файла
     try { 
        dataIn = new BinaryReader(new FileStream("testdata", FileMode.Open)); 
    } 
    catch(IOException exc) { 
         Console.WriteLine("Ошибка открытия файла:\n" + exc.Message) , 
          return; 
    }
Описание слайда:
Пример 14 // прочитать данные из файла try { dataIn = new BinaryReader(new FileStream("testdata", FileMode.Open)); } catch(IOException exc) { Console.WriteLine("Ошибка открытия файла:\n" + exc.Message) , return; }

Слайд 84





Пример 14
     try { 
         i = dataIn.ReadInt32(); 
         Console.WriteLine("Чтение " + i); 
         d = dataIn.ReadDouble(); 
         Console.WriteLine("Чтение " + d); 
         b = dataIn.ReadBoolean(); 
         Console.WriteLine("Чтение " + b); 
         d = dataIn.ReadDouble(); 
         Console.WriteLine("Чтение " + d); 
         str = dataIn.ReadString(); 
         Console.WriteLine("Чтение " + str); 
    }
Описание слайда:
Пример 14 try { i = dataIn.ReadInt32(); Console.WriteLine("Чтение " + i); d = dataIn.ReadDouble(); Console.WriteLine("Чтение " + d); b = dataIn.ReadBoolean(); Console.WriteLine("Чтение " + b); d = dataIn.ReadDouble(); Console.WriteLine("Чтение " + d); str = dataIn.ReadString(); Console.WriteLine("Чтение " + str); }

Слайд 85





Пример 14
        catch(IOException exc) { 
                 Console.WriteLine("Ошибка ввода-вывода:\n" + exc.Message); 
        } finally { 
               dataln.Close(); 
        } 
    }
}
Описание слайда:
Пример 14 catch(IOException exc) { Console.WriteLine("Ошибка ввода-вывода:\n" + exc.Message); } finally { dataln.Close(); } } }

Слайд 86





Пример 15
using System; 
using System.IO; 
class Inventory { 
    static void Main() { 
       BinaryWriter dataOut; 
       BinaryReader dataIn; 
       string item = "", st = ""; // наименование предмета 
       int onhand, k = 0, ch; // имеющееся в наличии кол-во 
       double cost; // цена
Описание слайда:
Пример 15 using System; using System.IO; class Inventory { static void Main() { BinaryWriter dataOut; BinaryReader dataIn; string item = "", st = ""; // наименование предмета int onhand, k = 0, ch; // имеющееся в наличии кол-во double cost; // цена

Слайд 87





Пример 15
    for ( ; ; ) { 
     do {  
       Console.Clear();    // очистка экрана
        Console.WriteLine( "1. Ввод данных о товаре");
        Console.WriteLine( "2. Поиск товара");
        Console.WriteLine( "3. Выход");
        Console.WriteLine( "Выберите пункт меню");
        ch = Convert.ToInt32(Console.ReadLine());  
     while(ch != 1  &&   ch != 2  &&  ch != 3);
Описание слайда:
Пример 15 for ( ; ; ) { do { Console.Clear(); // очистка экрана Console.WriteLine( "1. Ввод данных о товаре"); Console.WriteLine( "2. Поиск товара"); Console.WriteLine( "3. Выход"); Console.WriteLine( "Выберите пункт меню"); ch = Convert.ToInt32(Console.ReadLine()); while(ch != 1 && ch != 2 && ch != 3);

Слайд 88





Пример 15
     switch(ch) { 
       case 1: 
          try { 
             dataOut = new BinaryWriter(new FileStream("inventory.dat", FileMode.Create)); 
         } catch(IOException exc) { 
              Console.WriteLine("He удается открыть файл " + "товарных запасов для вывода"); 
              Console.WriteLine("Причина: " + exc.Message); 
              return; 
          }
Описание слайда:
Пример 15 switch(ch) { case 1: try { dataOut = new BinaryWriter(new FileStream("inventory.dat", FileMode.Create)); } catch(IOException exc) { Console.WriteLine("He удается открыть файл " + "товарных запасов для вывода"); Console.WriteLine("Причина: " + exc.Message); return; }

Слайд 89





Пример 15
  // записать данные о товарных запасах в файл 
          try { 
             Console.WriteLine("Введите данные о товарах, для выхода нажмите Enter "); 
            for ( ; ; ) {
              Console.Write("наименование предмета  - "); 
              item = Console.ReadLine();
              if (item == "") break;                           
              Console.Write("имеющееся в наличии количество  - "); 
              st = Console.ReadLine();
              if (st == "") break;
Описание слайда:
Пример 15 // записать данные о товарных запасах в файл try { Console.WriteLine("Введите данные о товарах, для выхода нажмите Enter "); for ( ; ; ) { Console.Write("наименование предмета - "); item = Console.ReadLine(); if (item == "") break; Console.Write("имеющееся в наличии количество - "); st = Console.ReadLine(); if (st == "") break;

Слайд 90





Пример 15
              onhand  = Convert.ToInt32(st);  
              Console.Write("цена  - ");
              st = Console.ReadLine();
              if (st == "") break;
              cost = Convert.ToDouble (st);  
              dataOut.Write(item);
              dataOut.Write(onhand );
              dataOut.Write(cost);
              k++;
           }
       }
Описание слайда:
Пример 15 onhand = Convert.ToInt32(st); Console.Write("цена - "); st = Console.ReadLine(); if (st == "") break; cost = Convert.ToDouble (st); dataOut.Write(item); dataOut.Write(onhand ); dataOut.Write(cost); k++; }   }

Слайд 91





Пример 15
       catch(IOException exc) { 
          Console.WriteLine("Ошибка записи в файл товарных запасов"); 
          Console.WriteLine("Причина: " + exc.Message); 
     } finally { 
          dataOut.Close(); 
     } 
     break;
Описание слайда:
Пример 15 catch(IOException exc) { Console.WriteLine("Ошибка записи в файл товарных запасов"); Console.WriteLine("Причина: " + exc.Message); } finally { dataOut.Close(); } break;

Слайд 92





Пример 15
     case 2: 
       if (k == 0) {
              Console.WriteLine("Вы не ввели данные !!!"); 
      }
      else {
         Console.WriteLine(); 
     // открыть файл товарных запасов для чтения 
        try { 
        dataIn = new BinaryReader(new  FileStream("inventory.dat", FileMode.Open)); 
         }
Описание слайда:
Пример 15 case 2: if (k == 0) { Console.WriteLine("Вы не ввели данные !!!"); } else { Console.WriteLine(); // открыть файл товарных запасов для чтения try { dataIn = new BinaryReader(new FileStream("inventory.dat", FileMode.Open)); }

Слайд 93





Пример 15
         catch(IOException exc) { 
             Console.WriteLine("He удается открыть файл " + "товарных запасов для ввода"); 
             Console.WriteLine("Причина: " + exc.Message); 
              return; 
         } 
    // найти предмет, введенный пользователем
         Console.Write("Введите наименование для поиска: "); 
         string what = Console.ReadLine(); 
         Console.WriteLine();
Описание слайда:
Пример 15 catch(IOException exc) { Console.WriteLine("He удается открыть файл " + "товарных запасов для ввода"); Console.WriteLine("Причина: " + exc.Message); return; } // найти предмет, введенный пользователем Console.Write("Введите наименование для поиска: "); string what = Console.ReadLine(); Console.WriteLine();

Слайд 94





Пример 15
          try {  // пока не достигнут конец файла
       // считывать каждое значение из файла
          while (dataIn.PeekChar() > -1){ 
       // читать данные о предмете хранения 
             item = dataIn.ReadString(); 
             onhand = dataIn.ReadInt32(); 
             cost = dataIn.ReadDouble(); 
   // проверить, совпадает ли он с запрашиваемым предметом,
    // если совпадает, то отобразить сведения о нем
             if (item.Equals(what,  StringComparison.OrdinalIgnoreCase)) {
Описание слайда:
Пример 15 try {  // пока не достигнут конец файла       // считывать каждое значение из файла      while (dataIn.PeekChar() > -1){ // читать данные о предмете хранения item = dataIn.ReadString(); onhand = dataIn.ReadInt32(); cost = dataIn.ReadDouble(); // проверить, совпадает ли он с запрашиваемым предметом, // если совпадает, то отобразить сведения о нем if (item.Equals(what, StringComparison.OrdinalIgnoreCase)) {

Слайд 95





Пример 15
               Console.WriteLine(item+": "+onhand+" штук в наличии. "+"Цена: {0:С} за штуку", cost); 
               Console.WriteLine("Общая стоимость по наименованию <{0}>: {1}", item, cost * onhand); 
                break; 
             } 
           } 
         } catch(EndOfStreamException) { 
            Console.WriteLine("Предмет не найден."); 
         }
Описание слайда:
Пример 15 Console.WriteLine(item+": "+onhand+" штук в наличии. "+"Цена: {0:С} за штуку", cost); Console.WriteLine("Общая стоимость по наименованию <{0}>: {1}", item, cost * onhand); break; } } } catch(EndOfStreamException) { Console.WriteLine("Предмет не найден."); }

Слайд 96





Пример 15
           catch(IOException exc) { 
              Console.WriteLine("Ошибка чтения из файла товарных запасов"); 
               Console.WriteLine("Причина: " + exc.Message); 
           } finally { 
                dataIn.Close(); 
           }
       }  // else  
        Console.ReadKey();  // остановка экрана
        break;
Описание слайда:
Пример 15 catch(IOException exc) { Console.WriteLine("Ошибка чтения из файла товарных запасов"); Console.WriteLine("Причина: " + exc.Message); } finally { dataIn.Close(); } } // else   Console.ReadKey(); // остановка экрана break;

Слайд 97





Пример 15
        case 3:  Environment.Exit(0); 
                  break;
     } // end switch(ch)
   }  // end for ( ; ; )
  } 
}
Описание слайда:
Пример 15 case 3: Environment.Exit(0); break; } // end switch(ch) } // end for ( ; ; ) } }

Слайд 98





Буферизованный поток
Чтобы выполнить чтение и запись двоичного файла, можно создать два объекта класса Stream, один для чтения, а другой для записи. 
Stream inputStream = File.0penRead(@"'C:\test\source\test1.cs"); 
Stream outputStream = File.0penWrite(@'"C:\test\source\test1.bak");
Чтение двоичного файла всегда выполняется через буфер. Буфер - это просто байтовый массив, содержащий данные, прочитанные методом Read().
Описание слайда:
Буферизованный поток Чтобы выполнить чтение и запись двоичного файла, можно создать два объекта класса Stream, один для чтения, а другой для записи. Stream inputStream = File.0penRead(@"'C:\test\source\test1.cs"); Stream outputStream = File.0penWrite(@'"C:\test\source\test1.bak"); Чтение двоичного файла всегда выполняется через буфер. Буфер - это просто байтовый массив, содержащий данные, прочитанные методом Read().

Слайд 99





Буферизованный поток
Метод Read() читает байты из внешней памяти, сохраняет их в буфере и возвращает количество считанных байт. 
Он продолжает читать, пока не прочитает все данные: 
const int SizeBuff = 1024;
byte[] buffer = new Byte[SizeBuff];
int bytesRead;
while ( (bytesRead = inputStream.Read(buffer, 0, SIZE_BUFF)) > 0 ) { 
      outputStream.Write(buffer, 0, bytesRead); 
}
Описание слайда:
Буферизованный поток Метод Read() читает байты из внешней памяти, сохраняет их в буфере и возвращает количество считанных байт. Он продолжает читать, пока не прочитает все данные: const int SizeBuff = 1024; byte[] buffer = new Byte[SizeBuff]; int bytesRead; while ( (bytesRead = inputStream.Read(buffer, 0, SIZE_BUFF)) > 0 ) { outputStream.Write(buffer, 0, bytesRead); }

Слайд 100





Буферизованный поток
Буферизованный поток - это объект, позволяющий операционной системе создавать собственный внутренний буфер для обмена данными с внешней памятью и самостоятельно определять число байтов, считываемых или записываемых за один раз. 
Программа по-прежнему будет заполнять буфер указанными порциями, но данные в этот буфер будут поступать из внутреннего системного буфера, а не из внешней памяти. В результате ввод/вывод будет происходить эффективнее и, следовательно, быстрее.
Описание слайда:
Буферизованный поток Буферизованный поток - это объект, позволяющий операционной системе создавать собственный внутренний буфер для обмена данными с внешней памятью и самостоятельно определять число байтов, считываемых или записываемых за один раз. Программа по-прежнему будет заполнять буфер указанными порциями, но данные в этот буфер будут поступать из внутреннего системного буфера, а не из внешней памяти. В результате ввод/вывод будет происходить эффективнее и, следовательно, быстрее.

Слайд 101





Буферизованный поток
Объект BufferedStream надстраивается над существующим объектом Stream, и, чтобы им воспользоваться, программист должен сначала создать обычный класс потока, как и раньше: 
Stream inputStream = File.0penRead(@"C:\test\source\folder3.cs"); 
Stream outputStream = File.0penWrite(@"C:\test\source\folder3.bak"); 
После этого надо передать объект класса Stream конструктору буферизованного потока: 
BufferedStream bufferedInput = new BufferedStream(inputStream); 
BufferedStream bufferedOutput = new BufferedStream(outputStream);
Описание слайда:
Буферизованный поток Объект BufferedStream надстраивается над существующим объектом Stream, и, чтобы им воспользоваться, программист должен сначала создать обычный класс потока, как и раньше: Stream inputStream = File.0penRead(@"C:\test\source\folder3.cs"); Stream outputStream = File.0penWrite(@"C:\test\source\folder3.bak"); После этого надо передать объект класса Stream конструктору буферизованного потока: BufferedStream bufferedInput = new BufferedStream(inputStream); BufferedStream bufferedOutput = new BufferedStream(outputStream);

Слайд 102





Буферизованный поток
Затем с объектом класса BufferedStream можно обращаться как с обычным потоком, вызывая методы Read() и Write(), операционная система сама будет выполнять буферизацию: 
while ( (bytesRead = bufferedInput.Read(buffer, 0, SIZE.BUFF)) > 0 ) { 
          bufferedOutput.Write(buffer, 0, bytesRead); 
} 
 Единственной особенностью применения буферизованных потоков является необходимость принудительно освобождать буфер, чтобы гарантировать, что все данные выведены в файл: 
bufferedOutput.Flush();
Описание слайда:
Буферизованный поток Затем с объектом класса BufferedStream можно обращаться как с обычным потоком, вызывая методы Read() и Write(), операционная система сама будет выполнять буферизацию: while ( (bytesRead = bufferedInput.Read(buffer, 0, SIZE.BUFF)) > 0 ) { bufferedOutput.Write(buffer, 0, bytesRead); }  Единственной особенностью применения буферизованных потоков является необходимость принудительно освобождать буфер, чтобы гарантировать, что все данные выведены в файл: bufferedOutput.Flush();

Слайд 103





Пример 16
namespace Programming_CSharp {
using System;
using System.IO;
class Tester  { 
    const int SizeBuff = 1024;
    public static void Main() {  
     // создать объект класса и выполнить его 
        Tester t = new Tester();
        t.Run();
    }
Описание слайда:
Пример 16 namespace Programming_CSharp { using System; using System.IO; class Tester { const int SizeBuff = 1024; public static void Main() { // создать объект класса и выполнить его Tester t = new Tester(); t.Run(); }

Слайд 104





Пример 16
  // запустить с именем каталога 
    private void Run() { // создать двоичные потоки 
       Stream inputStream = File.0penRead(@"C:\test\source\folder3.cs'"); 
       Stream outputStream = File.0penWrite(@"C:\test\source\folder3.bak");
  // надстроить буферизованные потоки над двоичными 
       BufferedStream bufferedInput = new BufferedStream(inputStream); 
       BufferedStream bufferedOutput = new BufferedStream(outputStream);
Описание слайда:
Пример 16 // запустить с именем каталога private void Run() { // создать двоичные потоки Stream inputStream = File.0penRead(@"C:\test\source\folder3.cs'"); Stream outputStream = File.0penWrite(@"C:\test\source\folder3.bak"); // надстроить буферизованные потоки над двоичными BufferedStream bufferedInput = new BufferedStream(inputStream); BufferedStream bufferedOutput = new BufferedStream(outputStream);

Слайд 105





Пример 16
       byte[] buffer = new Byte[SizeBuff]; 
       int bytesRead; 
       while ( (bytesRead =  bufferedInput.Read(buffer,0,SizeBuff)) > 0 ) { 
             bufferedOutput.Write(buffer,0,bytesRead); 
       } 
        bufferedOutput.Flush(); 
        bufferedInput.Close(); 
        bufferedOutput.Close(); 
     }
   }
}
Описание слайда:
Пример 16 byte[] buffer = new Byte[SizeBuff]; int bytesRead; while ( (bytesRead = bufferedInput.Read(buffer,0,SizeBuff)) > 0 ) { bufferedOutput.Write(buffer,0,bytesRead); } bufferedOutput.Flush(); bufferedInput.Close(); bufferedOutput.Close(); } } }

Слайд 106





Контрольные вопросы
1. Какие пространства имен нужны приложению для работы с файлами? 
2. Когда для записи файла следует использовать объект FileStream вместо объекта StreamWriter? 
3. Какие методы класса StreamWriter позволяют читать данные из файлов, и что делает каждый их них? 
4. Какой класс желательно использовать для сжатия потока с применением алгоритма Deflate?
Описание слайда:
Контрольные вопросы 1. Какие пространства имен нужны приложению для работы с файлами? 2. Когда для записи файла следует использовать объект FileStream вместо объекта StreamWriter? 3. Какие методы класса StreamWriter позволяют читать данные из файлов, и что делает каждый их них? 4. Какой класс желательно использовать для сжатия потока с применением алгоритма Deflate?



Похожие презентации
Mypresentation.ru
Загрузить презентацию