1 / 34

Высокоуровневые методы информатики и программирования Лекция 1 8 Работа с файлами

Высокоуровневые методы информатики и программирования Лекция 1 8 Работа с файлами. План работы. Типы файлов Класс FileStream Классы StreamReader и StreamWriter Классы BynaryReader и BynaryWriter Класс FileSystemWatcher Сериализация. Файлы и потоки.

ashanti
Download Presentation

Высокоуровневые методы информатики и программирования Лекция 1 8 Работа с файлами

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Высокоуровневые методы информатики и программированияЛекция 18Работа с файлами

  2. План работы • Типы файлов • Класс FileStream • Классы StreamReader иStreamWriter • Классы BynaryReader и BynaryWriter • Класс FileSystemWatcher • Сериализация

  3. Файлы и потоки • Файл – поименованные данные, хранящиеся на диске (кроме имени еще задается путь). • Поток – это сущность, допускающая операции чтения и записи. При открытии для чтения/записи файл становится потоком. Потоки это не только открытые файлы. Данные, получаемые по сети, являются потоком, кроме того, поток можно создать в памяти. В консольных приложениях, клавиатурный ввод и текстовый вывод – тоже потоки.

  4. Типы файлов • текстовые – содержат коды символов алфавита; последовательности символов разделены на строки специальными невидимыми символами: • код возврат каретки - 13 (Carriage return) • код перевод строки - 10 (Line feed) • или вместе 13 и 10 • двоичные (бинарные) – содержат любую последовательность двоичных чисел (данные во внутреннем формате, рисунки, аудио и т.п.).

  5. Классы для работы с содержанием файлов • Пространство имен System.IO • FileStream – базовый класс (файловый поток) позволяет побайтно читать/записывать содержание файла; • StreamReader/StreamWriter – классы для ввода / вывода текстовых данных (читают/записывают символы в текстовые файлы); • BinaryReader/BinaryWriter – классы дляввода-вывода двоичных данных (читают/записывают данные в двоичном формате в бинарные файлы)

  6. Работа с потоком файла • Полное имя - System.IO.FileStream • Позволяет открывать и выполнять работу с содержанием файла • Позволяет только побайтную работу с файлом (считать байт, записать байт) • В C# нет простых средств для преобразования массива байтов в другие типы данных. • Имеет 5 конструкторов FileStream (flName, FileMode fm) FileStream (flName, FileMode fm, FileAccessfa)

  7. Работа с содержанием файла с помощью класса FileStream • Создание файла // Создаем новый файл на диске C FileInfof = newFileInfo(@"C:\Test.dat"); // создаем файл и получаем доступ к потоку FileStreamfs = f.Create(); // используем объект FileStreamobject . . . // закрываем поток fs.Close(); • Открытие файла // создаем новый файл с помощью FileInfo.Open() FileInfo f2 = newFileInfo(@"C:\Test2.dat"); FileStream fs2 = f2.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); // UsetheFileStreamobject...

  8. Параметры открытия файла • Перечисление режимов открытия файла: publicenumFileMode { CreateNew, Create, Open, OpenOrCreate, Truncate, Append } • Перечисление виды выполняемых операций ввода/вывода: publicenumFileAccess { Read, Write, ReadWrite } • Перечисление режимов совместной работы с файлом: publicenumFileShare { None, Read, Write, ReadWrite }

  9. Перечисление FileMode

  10. Перечисление FileAccess

  11. Перечисление FileShare • None – не разрешается совместно использовать текущий файл. Любому запросу к открытому файлу (в текущем процессе или другом процессе) будет отказано до тех пор, пока файл не закроется. • Read– разрешается последующее открытие файла на чтение. • Write- разрешается последующее открытие файла на запись. • ReadWrite- разрешается последующее открытие файла на чтение и запись. • Delete- разрешается последующее удаление файла.

  12. Методы класса FileStream • intReadByte()- читать следующий байт; • int Read(byte[] buf, int offset, intiCount) - читать участок файла; • void WriteByte(byte val) – записать следующий байт; • void Write(byte[] buf, int offset, intiCount) – записать массив байтов; • long seek (long offset, SeekOrigin so)- выполнить поиск в файле; • void Flush()– записать содержание буфера в файл; • void Close()– закрыть файл.

  13. Взаимосвязь между классами Абстрактный класс для последовательности байтов Поток Stream Поток файла FileStream Класс для работы с содержанием файла, как с потоком Используется для создания Используется для создания Классы для работы с текстовыми файлами Классы для работы с двоичными файлами TextWriter TextReader Для чтения данных StreamWriter Для записи данных StreamReader Для чтения данных BinaryWriter Для записи данных BinaryReader

  14. Последовательность работы с файлом • создаем объект FileInfo– fi; • с помощью fi (или с помощью класса File) создаем объект класса FileStream - fs. • с помощью fsсоздаем объект класса • StreamReader / StreamWriter(объекты этих классов можно сосздать и с помощью имени файла); • BinaryReader / BinaryWriter; • после окончания работы с fsнужно вызвать метод Close().

  15. Методы классов File/FileInfoдля создания объектов, работающих с содержанием • Создание объектов классаFileStream: • Create() – созданиефайла и получение экземпляра класса FileStream для ввода. • Open() – создание экземпляра класса FileStream с различными параметрами по read/write • OpenRead() – создание экземпляра класса FileStream только для чтения (read-only) • OpenWrite() – создание экземпляра класса FileStream только для записи (write-only). • Создание объектов классаStreamReader/ StreamWriter: • CreateText() – создание экземпляра класса StreamWriter, для записи в текущий файла. • OpenText() – создание экземпляра класса StreamReader, для чтения из текущего файла. • AppendText() – создание экземпляра класса StreamWriter, для добавления в конец содержания текущего файла.

  16. Примеры • Пример создания объектов класса FileStream: • Получаем объект FileStream с помощью File.Create(). FileStreamfs = File.Create(@"C:\Test.dat"); • Получаем объект FileStream с помощью File.Open(). FileStream fs2 = File.Open(@"C:\Test2.dat", FileMode.OpenOrCreate, FileAccess.ReadWrite,FileShare.None); • Получаем объект FileStream только для чтения FileStreamreadOnlyStream = File.OpenRead(@"Test3.dat"); • Получаем объект FileStream только для записи FileStreamwriteOnlyStream = File.OpenWrite(@"Test4.dat"); • Пример создания объектов класса StreamReader / StreamWriter: • ПолучаемобъектStreamReader StreamReadersreader = File.OpenText(@"C:\boot.ini"); • Получаем объект StreamReader для нового файла StreamWriterswriter = File.CreateText(@"C:\Test3.txt"); • Получаем объект StreamReader для добавления текста StreamWriterswAppend = File.AppendText(@"C:\FinTst.txt");

  17. Получение объектов FileStreamс помощью объектов FileInfo // Получить ссылку FileStream для чтения FileInfo f3 = new FileInfo(@"C:\Test3.dat"); FileStreamreadOnlyStream = f3.OpenRead(); // . . . использование объекта FileStream readOnlyStream.Close(); // получение объекта FileStream для записи FileInfo f4 = new FileInfo(@"C:\Test4.dat"); FileStreamwriteOnlyStream = f4.OpenWrite(); //. . . использованиеобъектаFileStream writeOnlyStream.Close(); // Получаем ссылку на объект класса StreamReader FileInfo f5 = new FileInfo(@"C:\boot.ini"); StreamReadersreader = f5.OpenText(); // . . . использованиеобъектаStreamReader sreader.Close(); // Получаем ссылку на новый файл FileInfo f6 = new FileInfo(@"C:\Test5.txt"); StreamWriterswriter = f6.CreateText(); // . . . использование объекта StreamWriter swriter.Close(); // Получаем ссылку для добавления текста к файлу FileInfo f7 = new FileInfo(@"C:\FinTst.txt"); StreamWriterswAppend = f7.AppendText(); // . . . использованиеобъектаStreamWriter swAppend.Close();

  18. Конструкторы классов • Класс StreamWriter • StreamWriter(Stream FileStream) • StreamWriter(Stream FileStream, Encoding enc) • StreamWriter(string FileName) • StreamWriter(string FileName, boolbAppend) • StreamWriter(string FileName, boolbAppend, Encoding enc) • Класс StreamReader • StreamReader(Stream FileStream) • StreamReader(Stream FileStream, Encoding enc) • StreamReader(string FileName) • StreamReader(string FileName, Encoding enc)

  19. Пример записи в текстовый файл StreamWriter writer = File.CreateText(@"c:\reminders.txt"); writer.WriteLine("Не забудь cделать перевод."); writer.WriteLine("Не забудь позвонить маме."); for(inti = 0; i < 5; i++) writer.Write(i + " "); // вставляем символ новой строки writer.Write(writer.NewLine);

  20. Пример чтения из текстового файла StreamReadersr = File.OpenText(@"c:\reminders.txt"); string input = null; while ((input = sr.ReadLine()) != null) Console.WriteLine (input); • Результат: Не забудь cделать перевод. Не забудь позвонить маме. 0 1 2 3 4 5

  21. Пример создания и работы с файлом FileStream fs = newFileStream ("c:\\TestFile.txt",FileMode.Create); StreamWriter sw = new StreamWriter(fs); // записываем целое число sw.Write(15); // закрываем файл sw.Close();

  22. Пример использованияобъекта StreamReader StreamReadersr; sr = new StreamReader(@"C:\aaa.txt"); string sLine; do sLine = sr.ReadLine(); while (sLine != null); sr.Close();

  23. Двоичные (бинарные) файлы • Хранят обычно числовые данные во внутреннем формате (так, как они хранятся в оперативной памяти). • Конструкторы используют объекта FileStream • BynaryWriter(Stream st) • BynaryReader(Stream st) • Например: FileStream fs = new FileStream("c:\\TestFile.myfile", FileMode.Create); BinaryWriter bw = new BinaryWriter(fs);

  24. Основные методы для работы с бинарными файлами • Методы класса System.IO.BynaryWriter • void Write(…)– методы для записи значений данного в файл, 18 перегруженных методов; • void Write(char[ ] achBuffer, int begin, int number); методы для записи массива данных в файл; • Seek(long offset, SeekOrigin origin) – переход на заданную позицию в файле; • void Flush()– запись из буффера в файл; • void Close()– закрытие файла. • Методы класса System.IO.BynaryReader • Read<тип>()– метод для чтения одного значения из файла; • Read<тип>s(int n)– метод для чтения массива значений из файла; • void Close()

  25. //открываем бинарный writer для файла. FileInfo f = new FileInfo(@"C:\BinFile.dat"); BinaryWriterbw = new BinaryWriter(f.OpenWrite()); // выводим на экран тип объекта BaseStream. Console.WriteLine("Base stream is: {0}",bw.BaseStream); // создаем некоторые данные для сохранения в файле double aDouble = 1234.67; intanInt = 34567; string aString = "A, B, C"; // записывем данные в файл bw.Write(aDouble); bw.Write(anInt); bw.Write(aString);

  26. Методы Read()класса BinaryReader • boolReadBoolean()– чтение логического значения; • char ReadChar() – чтение значения типа char; • string ReadString() – чтение строки; • int ReadInt16() (Int32, Int64)– чтение целых значений (двух байтного – short; четырех байтного – int; 8 байтного - long); • float ReadSingle() – чтение значенияс плавающей точкой - float; • double ReadDouble() – чтение значенияс плавающей точкой - doulble; • decimal ReadDecimal() – чтение десятичного значения - decimal; • . . .

  27. FileInfo f = new FileInfo(@"C:\BinFile.dat"); ... // Чтениеданныхизбинарногофайла BinaryReaderbr = new BinaryReader(f.OpenRead()); Console.WriteLine(br.ReadDouble()); Console.WriteLine(br.ReadInt32()); Console.WriteLine(br.ReadString());

  28. Класс для наблюдением за происходящими изменениями в файловой системе -FileSystemWatcher

  29. Класс FileSystemWatcher • Конструктор: FileSystemWatcher(); • Свойства: • Pathзадает каталог за которым наблюдаем watcher.Path = @”C:\Test”; • Filterзадает шаблон файлов, за которыми выполняется наблюдение watcher.Filter = "*.txt"; • NotifyFilter задает список событий, за которыми выполняется наблюдение watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName; • Событие – изменение заданных атрибутов файлов в каталоге: watcher.Changed+= newFileSystemEventHandler(OnChanged); • Запуск наблюдения за событиями watcher.EnableRaisingEvents = true;

  30. Перечисление NotifyFilters Типы событий за которыми требуется наблюдать:

  31. Примеры использования FileSystemWatcher • Создание объекта: FileSystemWatcherwatcher = newFileSystemWatcher(); • Задаем путь к каталогу за которым наблюдаем watcher.Path = @”C:\Test”; • Задаем шаблон файлов, за которыми выполняется наблюдение watcher.Filter = "*.txt"; • Задаем список событий, за которыми выполняется наблюдение watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName; • Задаем обработчики событий: watcher.Changed+= newFileSystemEventHandler(OnChanged); watcher.Created+= newFileSystemEventHandler(OnChanged); watcher.Deleted+= newFileSystemEventHandler(OnChanged); watcher.Renamed += newRenamedEventHandler(OnRenamed); • Запуск наблюдения за событиями watcher.EnableRaisingEvents = true;

  32. Класс FileSystemEventArgs • Данные о событиях в файлах папки • Свойства • ChangeType – тип произошедшего события (из перечисления WatcherChangeTypes) • FullPath – полный путь к измененному файлу или папке • Name – имя измененного файла или папки

  33. ПеречислениеWatcherChangeTypes Типы событий, которые произошли в наблюдаемой папке:

  34. Пример обработчика события private static void OnChanged(object source, FileSystemEventArgs e) { switch (e.ChangeType) { case WatcherChangeTypes.Deleted: Console.WriteLine("{0} - deleted", e.Name); break; case WatcherChangeTypes.Created: Console.WriteLine("{0} - created", e.Name); break; case WatcherChangeTypes.Changed: Console.WriteLine("{0} - changed", e.Name); break; } }

More Related