по лабораторной работе № 2
По дисциплине «Программное обеспечение компьютерных сетей»
Казань
Цель работы: Разработать программный модуль с применением асинхронной операции чтения согласно заданию.
Задание: 1. Прочитать теорию. 2. Создать проект по созданию консольного приложения Visual С #. 3. Написать программу на C# для выполнения шагов 4-9. 4. Создать файл «File.txt», порождая исключение, если этот файл уже существует. 5. Создать файл «File.txt», перезаписывая уже существующий файл, с доступом на чтение/запись и с предоставлением текущему процессу и другим процессам разрешение на чтение/запись. 6. Записать в созданный файл строку: «I entered the Kazan National Research Technical University named after A.N. Tupolev». 7. Считать записанную строку из файла и вывести в консоли. 8. Осуществить асинхронную операцию чтения потока из файла «File.txt» до тех пор, пока не встретиться слово «Technical». (Подсказка: реализовать такой поиск следует посредством функции обратного вызова.) Замечание: в программе после асинхронной операции следует выполнить имитацию основной обработки. Выполнение:
1) Заходим на ссылку https://www.dropbox.com/sh/nrhnmpgu4642hp0/0jR_h4_Inu 2) Скачиваем и устанавливаем Visual Studio 2008 3) Открываем Visual Studio 2008
4) Создаем новый проект для выполнения задания 5) Нажимаем Ctrl-N открывается новое окно с выбором формата проекта 6) В правой колонке Project types, имещ вкладку Other languages выбираем Visual C# -Windows 7) Далее в следующем окне ищем Console Application 8) В открытом окне начинаем создавать программу согласно условиям
Программный код программы using System; // разрешает использование типов в пространстве имен, поэтому уточнение использования типа в этом пространстве имен не требуется using System.Collections.Generic; using System.Linq; using System.Text; // Синхронный ввод вывод using System.IO; // Синхнонный ввод вывод using System.Threading;
namespace Console { class Program { static FileStream file; // Выполняется операция ввода вывода static byte[] buf = new byte[10]; // Создание буфера с длиной 10 байт static AsyncCallback Callback; // Поле-делегат для функции обратного вызова static string str = "";
static void Main(string[] args) { Callback = new AsyncCallback(CallBackFunction); Callback = CallBackFunction; file = new FileStream("File.txt", FileMode.Open, FileAccess.Read, FileShare.Read, 10, true); // Конструкция файла, параметры FileMode показывают как открывать файл, FileAceess.Read даёт разрешение только на чтение файла file.BeginRead(buf, 0, 10, Callback, null); // Файл начинает считываться каждые 10 байт Thread.Sleep(3000); // имитация основной обработки }
static void CallBackFunction(IAsyncResult AsRes) { int res = file.EndRead(AsRes); str += Encoding.ASCII.GetString(buf);// Преобразуется в строку GetString() класса Encoding System.Console.WriteLine(str); if (res > 0 &&!str.Contains("Technical")) { file.BeginRead(buf, 0, 10, Callback, null); // Файл начинает считываться по 10 файт, если слово не будет найдено, иначе программа выдаёт предложение
} else { System.Console.WriteLine("Файл завершился или найдено ключевое слово."); // Программа выводит на экран предложение данное в кавычках } } } }
|