Скорость загрузки текстового файла
Задача темы: изучить методику и получить навыки в разработке тестового приложения побайтовой и посимвольной загрузки и вывода содержания текстового файла в форму для просмотра и оценки скорости этих процессов.
Разработка: Приложение "Viewer" для просмотра содержания и оценки скорости загрузки текстовых файлов.
Состав выполняемых функций:
- Файловые операции: открыть, закрыть
- Алгоритмы: подсчет времени загрузки и вывода файла для просмотра
- Информационно-справочные: О программе
Наращивание функциональности не предусматривается.
Защита – модификация данных не предусматривается.
В качестве входных данных используется любые текстовые файлы. Выходные данные программы – графическое отображение результатов в ListBox, ProgressBar и MessageBox о вычисленной продолжительности загрузки и вывода информации для SmartDevice.
Шаг 1. Разработка графического интерфейса
Используется только одна форма Form1. В форме располагается listBox для вывода содержимого текстового файла и ProgressBar для индикации скорости загрузки, для которого изначально устанавливается свойство Visible=False.
В дизайнере формы устанавливаются также невидимые элементы – mainMenu с тремя опциями (Посимвольный вывод; Побайтовый вывод; Выход), openFileDialog и timer для подсчета времени загрузки файла и вывода его содержимого в Листбокс. Примерный дизайн формы приведен на рис.4.1.
Шаг 2. Расширяем состав библиотек формы 1
using System; using System.Drawing; using System.Collections; using System.Windows.Forms; using System.Data; //Добавляем библиотеки работы с файлами и регулярными выражениями using System.IO; using System.Text.RegularExpressions;
Шаг.3 Создаем процедуру автозагрузки данных в форму
Начнем с вывода информации "О программе" в listBox1.
private void Form1_Load (object sender, System.EventArgs e) { listBox1.Items.Add(" О программе"); listBox1.Items.Add(""); listBox1.Items.Add(" Используя конструкцию записи строки"); listBox1.Items.Add(" listBox1. Items. Add (S), где:"); listBox1.Items.Add(" S-переменная,содержащая текст строки"); listBox1.Items.Add(" файла, создайте программу просмотра"); listBox1.Items.Add(" содержимого файла"); listBox1.Items.Add(""); listBox1.Items.Add(" (C)Родигин Л.А., 2006"); listBox1.Items.Add(" C#,Платформа VisualStudio NET, 2003"); }
Шаг 4. Создаем процедуру посимвольной загрузки файла
//символьный вывод private void menuItem1_Click(object sender, System.EventArgs e) { string file_name="*.*"; // шаблон имен файлов – все типы if (openFileDialog1.ShowDialog()==DialogResult.OK) { file_name=openFileDialog1.FileName; } else {return;} // если файл не выбираем, то возврат в вызывающую программу FileStream fin; // если файл выбрали, то определяем переменную потока try {открываем файл fin=new FileStream(file_name,FileMode.Open); } catch(IOException exc) {если файл недоступен MessageBox.Show ("Невозможно открыть файл \n"+file_name,"Ошибка"); return;} long L=fin.Length; // вычисляем длину файла (мусор?) // Считываем значения из файла StreamReader fstr_in=new StreamReader(fin); //в переменную считываются все символы, пока не кончится строка string sc="0"; // загружаемая из файла строка int P=1; // начальное деление линейки progressBar int s=0; // число символов в строке progressBar1.Visible=true; // показываем progressBar listBox1.Items.Clear(); // вычиcляем число строк в файле long T; timer1.Enabled=true; // запускаем таймер T=DateTime.Now.Ticks; // фиксируем время старта таймера while((sc=fstr_in.ReadLine())!=null) { s=s+sc.Length; listBox1.Items.Add(sc); //добавляем строку в листбокс // progressBar рассчитан на 100 делений, поэтому вычисляем цену деления if (P*(int)L/100<=s) { P=P+1; progressBar1.Value=P-1; } } fstr_in.Close(); // закрываем поток и выводим сообщение с результатами MessageBox.Show((DateTime.Now.Ticks-T).ToString(),"Время загрузки"); timer1.Enabled=false; // выгружаем из памяти таймер progressBar1.Visible=false; // прячем progreassBar return; // возвращаемся в программу }