Опубликован: 09.09.2008 | Уровень: специалист | Доступ: платный | ВУЗ: Российская международная академия туризма
Лекция 5:

Скорость загрузки текстового файла

< Лекция 4 || Лекция 5: 12 || Лекция 6 >
Аннотация: В лекции рассмотрены побайтовая и посимвольная загрузка текстового файла. Продемонстрирован процесс подсчета времени загрузки текстового файла с использованием таймера

Задача темы: изучить методику и получить навыки в разработке тестового приложения побайтовой и посимвольной загрузки и вывода содержания текстового файла в форму для просмотра и оценки скорости этих процессов.

Разработка: Приложение "Viewer" для просмотра содержания и оценки скорости загрузки текстовых файлов.

Состав выполняемых функций:

  • Файловые операции: открыть, закрыть
  • Алгоритмы: подсчет времени загрузки и вывода файла для просмотра
  • Информационно-справочные: О программе

Наращивание функциональности не предусматривается.

Защита – модификация данных не предусматривается.

В качестве входных данных используется любые текстовые файлы. Выходные данные программы – графическое отображение результатов в ListBox, ProgressBar и MessageBox о вычисленной продолжительности загрузки и вывода информации для SmartDevice.

Шаг 1. Разработка графического интерфейса

Используется только одна форма Form1. В форме располагается listBox для вывода содержимого текстового файла и ProgressBar для индикации скорости загрузки, для которого изначально устанавливается свойство Visible=False.

Примерный дизайн – элемент ProgressBar невидим.

Рис. 4.1. Примерный дизайн – элемент ProgressBar невидим.

В дизайнере формы устанавливаются также невидимые элементы – 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; // возвращаемся в программу	
}
< Лекция 4 || Лекция 5: 12 || Лекция 6 >
jo jojo
jo jojo
Нидерланды
Ярославй Грива
Ярославй Грива
Россия, г. Санкт-Петербург