После завершения работы удалить файлы с дискового носителя
Государственное образовательное учреждение высшего профессионального образования
«Казанский национальный исследовательский технический университет им. А.Н.Туполева»
Кафедра автоматизированных систем обработки информации и управления
Лабораторная работа № 1
НОСИТЕЛИ, ПАПКИ И ФАЙЛЫ.
ПОСЛЕДОВАТЕЛЬНАЯ ОБРАБОТКА ФАЙЛОВ
Вариант №12
Выполнил: студент группы 4209 Шильников Д. В.
Проверил: Суздальцев В.А.
Казань. 2013
Цель проведения лабораторной работы
Целью проведения лабораторной работы является привитие практических навыков определения объемных и временных характеристик файлов при последовательной обработке.
Перед выполнением работы студент должен знать основы программирования на языке С#, методы обработки последовательных файлов и ознакомится с теоретическим материалом лекций соответствующего раздела дисциплины «Информатика».
Порядок выполнения лабораторной работы
1. Определить размер кластера носителя и количество секторов в кластере. Для этого создать файл в текстовом редакторе (Блокнот) небольшого размера (до 512 байтов). Определить свойства файла («Правая клавиша мыши» + «Свойства») и занести их в таблицу. Свойство: «На диске» определить размер кластера. Размер сектора считать равным 512 байт. Результаты прдоставить в форме таблицы (см. таблицу № 1).
2. Написать и отладить программу создания файла на языке С#. Программу подготовить для консольного режима. Использовать фрагменты примера программы из приложения 1. в отчет включить алгоритм программы (схема алгоритмы) и ее текст (C#).
3. Подготовить семь текстовых файлов в соответствии с заданием (см. таблица 2) лабораторной работы (файлы с записями фиксированной длины). Имена файлов должны включать номер файла, размер в кластерах, фамилию студента (например, f1_1000_Иванов.txt). Перед созданием оценить объем файлов и определить объем свободного места на носителе. Сделать вывод о возможности создания файлов. Результаты расчетов занести в таблицу (таблица 3). Перед созданием файлов на носителе предоставить расчеты преподавателю для проверки. Все расчеты оформлять в соответствии с требованиями подготовки научно-технических отчетов. Сделать выводы об объеме незаполненного пространства кластеров и определить процент заполнения дисковой памяти.
4. Определить характеристики полного имени подготовленных файлов: (полное имя, его длина, длина пути, резерв длины пути (максимальная длина пути: 240 символов), резерв длины имени файла).
5. Определить временные характеристики файлов, полученные при их создании (самостоятельно спроектировать таблицу для размещения результатов и разместить в ней результаты экспериментов).
5.1. Время создания файла, среднее время добавления записи и создания кластера.
5.2. Построить графики изменения среднего времени добавления записи, и кластера от объема файла в записях и кластерах (использовать табличный процессор Excel).
6. Написать и отладить программу на языке С#, выполняющую следующие функции для файла:
6.1. Последовательное чтение записей файла.
6.2. Определение количества записей в файле.
6.3. Определение объема полезной информации в файле.
6.4. Определение длины каждой записи файла.
6.5. Определение смещения каждой записи в файле.
6.6. Определение времени чтения файла, включая время открытия и закрытия файлов.
6.7. Результаты экспериментов отобразить в таблице и на графиках (самостоятельно спроектировать таблицу для размещения результатов и разместить в ней результаты экспериментов).
6.8. Сделать выводы о видах временных зависимостей.
После завершения работы удалить файлы с дискового носителя.
7. Подготовить отчет о выполнении лабораторной работы.
8. Поготовится к теоретическому опросу контролиррующей системой.
9. Защитить отчет лабораторной работы
1. Определить размер кластера носителя и количество секторов в кластере. Результаты предоставить в форме таблицы.
Определим размер кластера носителя и количество секторов в кластере. Для этого создадим файл в текстовом редакторе небольшого размера. Для того чтобы определить размер кластера носителя, нужно нажать правой кнопкой мыши по созданному текстовому документу и нажать на Свойства. В появившемся окне в строке На диске:видно сколько памяти выделяется для хранения данного текстового документа на диске. В нашем случае размер текстового документа - 7 Байт, размер на диске – 4 Кб. Это значит, что размер кластера носителя – 4Кб или 4×1024=4096 Байт. Считая размер сектора равным 512 Байт, можно вычислить количество секторов в кластере. Для этого размер кластера разделим на размер сектора:4096 Байт: 512 Байт=8. Все результаты предоставим в форме таблицы:
|
Характеристика файла | Значение | |
Имя файла | Ш.Д. | |
Приложение | Блокнот | |
Размещение | C:\work\4209\Shilnikov_D | |
Размер в байтах | ||
Размер в Кбайтах | 0,0009765625 | |
Размер в Мбайтах | 0.00000095367431640625 | |
На диске в байтах | ||
На диске в Кбайтах | ||
На диске в Мбайтах | 0.00390625 | |
Размер в секторах (сектор: 512 байт) | ||
Размер в кластерах | 4кб | |
Создан | 11 сентября 2013 г., 12:32:11 | |
Изменен | 11 сентября 2013 г., 12:37:52 | |
Открыт | 11 сентября 2013 г., 12:43:33 | |
Только чтение | нет | |
Скрытый | нет | |
Архивный | да |
2. Написать и отладить программу создания файла на языке С#. Программу подготовить для консольного режима. Использовать фрагменты примера программы из приложения 1. в отчет включить алгоритм программы (схема алгоритмы) и ее текст (C#).
Напишем и отладим программу создания файла на языке С# в консольном режиме, используя фрагменты примера программы из приложения 1. Создадим новый проект в Microsoft Visual Studio C# (MVS C#). Для начала запускаем программу MVS C# следующим образом: Пуск→Все программы→ Microsoft Visual Studio 2008.Чтобы создать проект проделываем следующие операции: на панели быстрого доступа нажимаем на Fileдалее выбираем New→Project.В появившемся окне в левом столбце выбираем Visual С++, появится несколько строчек, выбираем Visual С#.В правом столбце выбираем режим консольного приложения, т.е. выбираем строчку ConsoleApplication.Далее появится новое окно, в котором нажимаем на Finish.
Далее, используя навыки программирования, создаем программу, которая будет создавать новый текстовый документ.
Текст программы:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace Consol
{
class Program
{
static void Main(string[] args)
{
int i;
string str;
FileStream f1;
const int n = 71040;
f1 = new FileStream("Fl_1110_Shilnikov_D.txt", FileMode.Create);
f1.Close();
f1 = new FileStream("Fl_1110_Shilnikov_D.txt", FileMode.Open, FileAccess.Write);
StreamWriter fstr = new StreamWriter(f1);
str = "llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll";
Console.Write("Nagmite Enter");
Console.ReadLine();
for (i = 0; i < n; i++)
{ fstr.WriteLine(str); }
fstr.Close();
}
}
}
Данная программа создает в папке, в которой расположен сам проект, пустой текстовый документ «Fl_1110_Shilnikov_D.txt».
Блок-схема алгоритма программы будет выглядеть следующим образом:
3. Подготовить семь текстовых файлов в соответствии с заданием (см. таблица 2) лабораторной работы (файлы с записями фиксированной длины). Имена файлов должны включать номер файла, размер в кластерах, фамилию студента (например, f1_1110_Shilnikov.txt). Перед созданием оценить объем файлов и определить объем свободного места на носителе. Сделать вывод о возможности создания файлов. Результаты расчетов занести в таблицу 3. Перед созданием файлов на носителе предоставить расчеты преподавателю для проверки. Все расчеты оформлять в соответствии с требованиями подготовки научно-технических отчетов. Сделать выводы об объеме незаполненного пространства кластеров и определить процент заполнения дисковой памяти.
Таблица 2. Вариант задания
Длина записи | Размеры файлов в кластерах | Символ для формирования содержания записи | |||||||
Файл f1 | Файл f2 | Файл f3 | Файл f4 | Файл f5 | Файл f6 | Файл f7 | |||
l |
Подготовим семь текстовых файлов в соответствии с вариантом №12 лабораторной работы. Перед созданием оценим объем файлов и определим объем свободного места на носителе. Сделаем это следующим образом: Заходим в Мой компьютер, нажимаем правой кнопкой на диск С, в появившемся окне нажимаем на Свойства, находим две строчки – Занятои Свободно, запишем соответствующие значения этим параметрам:
Занято:45 368 201 216 байт
Свободно:19 644 379 136 байт
Оценим объем файлов, которые нам предстоит создать. Зная, что на диске 1 кластер занимает 4096 байт, определим объем всех семи файлов по следующей формуле: V=k*b.
1 файл: 1110 × 4096 = 4546560 байт;
2 файл: 1310 × 4096 = 5365760 байт;
3 файл: 1510 × 4096 = 6184960 байт;
4 файл: 1710 × 4096 = 7004160 байт;
5 файл: 1910 × 4096 = 488960 байт;
6 файл: 2110 × 4096 = 8642560 байт;
7 файл: 2310 × 4096 = 9461760 байт.
Определим объем суммы всех семи файлов:
4546560 + 5365760 + 6184960 + 7004160 + 488960 + 8642560 + 9461760 =
49029120 байт. Т.к. объем свободного места на диске превышает объем суммы наших семи файлов (19 644 379 136 <49 029 120), то возможность создать эти файлы существует.
Результаты расчетов занесем в таблицу 3:
Таблица 3. Объемные характеристики файлов
Размер кластера в байтах – 4096 Размер записи - 64 | ||||||
Имя файла в папке «ЛБ4209» | Размер файла в кластерах (из задания) | Количество записей в кластере | Размер файла в записях | Размер файла в Мбайт, Кбайт, байт | На диске Мбайт, Кбайт, байт | |
f1 | f1_1110_Шильников | 4.3359375 | 4.3359375 | |||
f2 | f2_1310_Шильников | 5.1171875 | 5.1171875 | |||
f3 | f3_1510_Шильников | 5.8984375 | 5.8984375 | |||
f4 | f4_1710_Шильников | 6.6796875 | 6.6796875 | |||
f5 | f5_1910_Шильников | 7.4609375 | 7.4609375 | |||
f6 | f6_2110_Шильников | 8.2421875 | ||||
f7 | f7_2310_Шильников | 9.0234375 | 9.0234375 | |||
Всего | 46.7578125 | 46.7578125 | ||||
Свободное место на диске C | ---- | |||||
Определение процента заполнения дисковой памяти:
Чтобы определить полный объем дисковой памяти необходимо сложить объем свободного места и объем занятого места на диске:
Занято:45 368 201 216 байт
Свободно:19 644 379 136 байт
Полный объем дисковой памяти: 45 368 201 216 + 19 644 379 136 = 65 012 580 352 Байт.
Чтобы определить процент заполнения дисковой памяти, необходимо разделить объем свободного места на диске на полный объем дисковой памяти и полученное частное умножить на 100%.
Процент свободного места: (19 644 379 136 / 65 012 580 352) × 100% =
0.302 100% = 30.2%
4. Определить характеристики полного имени подготовленных файлов: (полное имя, его длина, длина пути, резерв длины пути (максимальная длина пути: 240 символов), резерв длины имени файла).
Чтобы определить резерв длины пути файла, необходимо из максимально возможной длины пути файла вычесть длину пути файла.
Определим характеристики полного имени подготовленных файлов:
Первый текстовый файл:
Полное имя:fl_1110_Shilnikov_D.txt
Длина имени:23 символа
Путь файла: sys:\work\4209\Shilnikov_Daniil\
Длина пути файла:55 символов
Резерв длины пути:240 – 32 = 208 символов
Второй текстовый файл:
Полное имя:f2_1310_Shilnikov_D.txt
Длина имени:23 символа
Путь файла: sys:\work\4209\Shilnikov_Daniil\
Длина пути файла:55 символов
Резерв длины пути:240 – 32 = 208 символов
Третий текстовый файл:
Полное имя:f3_1510_Shilnikov_D.txt
Длина имени:23 символа
Путь файла: sys:\work\4209\Shilnikov_ Daniil \
Длина пути файла:55 символов
Резерв длины пути:240 – 32 = 208 символов
Четвертый текстовый файл:
Полное имя:f4_1710_Shilnikov_D.txt
Длина имени:23 символа
Путь файла: sys:\work\4209\Shilnikov_ Daniil \
Длина пути файла:55 символов
Резерв длины пути:240 – 32 = 208 символов
Пятый текстовый файл:
Полное имя:f5_1910_Shilnikov_D.txt
Длина имени:23 символа
Путь файла: sys:\work\4209\Shilnikov_ Daniil \
Длина пути файла:55 символов
Резерв длины пути:240 – 32 = 208 символов
Шестой текстовый файл:
Полное имя:f6_2110_Shilnikov_D.txt
Длина имени:23 символа
Путь файла: sys:\work\4209\Shilnikov_Daniil\
Длина пути файла:55 символов
Резерв длины пути:240 – 32 = 208 символов
Седьмой текстовый файл:
Полное имя:f7_2310_Shilnikov_D.txt
Длина имени:23 символа
Путь файла: sys:\work\4209\Shilnikov_ Daniil \
Длина пути файла:55 символов
Резерв длины пути:240 – 32 = 208 символов
5. Определить временные характеристики файлов, полученные при их создании (самостоятельно спроектировать таблицу для размещения результатов и разместить в ней результаты экспериментов).
1. Время создания файла, среднее время добавления записи и создания кластера.
2. Построить графики изменения среднего времени добавления записи, и кластера от объема файла в записях и кластерах (использовать табличный процессор Excel).
5.1 Для того чтобы определить время создания файла, необходимо дополнить текст нашей программы функциями подсчета времени, которые будут располагаться до и после цикла записи строк в файл. Разность этих значений функций и будет значением времени создания файла. Само это значение будет записываться в отдельный файл <show.txt>.
Текст программы:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace Consol
{
class Program
{
static void Main(string[] args)
{
FileInfo foutshow = new FileInfo("show.txt");
DateTime nowсn = new DateTime();
double tb = 0;
double te = 0;
int i;
string str;
FileStream f1;
const int n = 71040;
f1 = new FileStream("Fl_1110_Shilnikov_D.txt", FileMode.Create);
f1.Close();
f1 = new FileStream("Fl_1120_Shilnikov_D.txt", FileMode.Open, FileAccess.Write);
StreamWriter fstr = new StreamWriter(f1);
str = "llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll";
Console.Write("Nagmite Enter");
Console.ReadLine();
nowсn = DateTime.Now;
tb = nowсn.Hour * 3600 + nowсn.Minute * 60 + nowсn.MilliSecond;
for (i = 0; i < n; i++)
{ fstr.WriteLine(str); }
nowсn = DateTime.Now;
te = nowсn.Hour * 3600 + nowсn.Minute * 60 + nowсn.MilliSecond;
fstr.Close();
StreamWriter f = foutshow.CreateText();
f.WriteLine
(string.Format("\"{0:000}\";\"{1:000}\";\"{2:0000}\"", tb, te, te - tb));
f.Close();
}
}
}
Проделаем данную операцию со всеми семи программами.
Среднее время добавления записи можно найти по формуле: t=T/c, где t – это среднее время добавления, T – это время создания файла, с – это количество записей в файле.
Проведем вычисления для всех файлов:
Для 1-го файла: 47 / 71040=0.00065 с;
Для 2-го файла: 62 / 83840=0.00073 с;
Для 3-го файла: 70 / 96640=0.00072 c;
Для 4-го файла: 78 / 109440=0.0007 c;
Для 5-го файла: 93 / 122240=0.00075 c;
Для 6-го файла: 94 / 135040=0.00069 c;
Для 7-го файла: 110 / 147840=0.00074 c.
Среднее время создания кластера можно найти по формуле: V=T/k, где V – это среднее время добавления записи, T – это время создания файла, k – это количество занимаемых кластеров файлом.
Проведем вычисления для всех файлов:
Для 1-го файла: 47 / 1110=0.0419 с;
Для 2-го файла: 62 / 1310=0.0469 с;
Для 3-го файла: 70 / 1510=0.0460 c;
Для 4-го файла: 78 / 1710=0.0453 c;
Для 5-го файла: 93 / 1910=0.0484 c;
Для 6-го файла: 94 / 2110=0.0443 c;
Для 7-го файла: 110 / 2310=0.047 c.
Занесем все данные в таблицу 4:
Таблица №4. временные характеристики файлов
Имя файла | Время создания файла | Среднее время добавления записи | Среднее время создания кластера |
Fl_1110_Shilnikov_D.txt | 0.00065 с | 0.0419 с | |
F2_1310_Shilnikov_D.txt | 0.00073 с | 0.0469 с | |
F3_1510_Shilnikov_D.txt | 0.00072 с | 0.0460 с | |
F4_1710_Shilnikov_D.txt | 0.0007 с | 0.0453 c | |
F5_1910_Shilnikov_D.txt | 0.00075 с | 0.0484 с | |
F6_2110_Shilnikov_D.txt | 0.00069 с | 0.0443 с | |
F7_2310_Shilnikov_D.txt | 0.00074 с | 0.047 c |
5.2. Чтобы построить график изменения среднего времени добавления записи, от объема файла в записях, необходимо скопировать значения среднего времени добавления записи и значения количества записей в рабочее поле табличного процессора Excel и по этим значениям построить график. Выполнив данные действия, получим график, изображенный на Рис.1:
Рис. 1. График изменения среднего времени добавления
записи от объема файла в записях.
Чтобы построить график изменения среднего времени добавления кластера от объема файла в кластерах, необходимо скопировать значения среднего времени добавления кластера и значения количества кластеров в рабочее поле табличного процессора Excel и по этим значениям построить график. Выполнив данные действия, получим график, изображенный на рис.2:
Рис. 2. График изменения среднего времени добавления
кластера от объема файла в кластерах.
6. Написать и отладить программу на языке С#, выполняющую следующие функции для файла:
1. Последовательное чтение записей файла.
2. Определение количества записей в файле.
3. Определение объем полезной информации в файле.
4. Определение длины каждой записи файла.
5. Определение смещения каждой записи в файле.
6. Определение времени чтения файла, включая время открытия и закрытия файлов.
7. Результаты экспериментов отобразить в таблице и на графиках (самостоятельно спроектировать таблицу для размещения результатов и разместить в ней результаты экспериментов).
8. Сделать выводы о видах временных зависимостей.
Используя навыки программирования, напишем и отладим программу на языке С#, выполняющую следующие функции для файла:
1. Последовательное чтение записей файла.
2. Определение количества записей в файле.
3. Определение объем полезной информации в файле.
4. Определение длины каждой записи файла.
5. Определение смещения каждой записи в файле.
6. Определение времени чтения файла, включая время открытия и закрытия файлов.
Текст программы:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace Информатика
{
class Program
{
static void Main(string[] args)
{
int i, k = 0;
int tb = 0;
int te = 0;
string s = null;
int q = 0;
int L = 0;
int l = 0;
int a = 0;
FileStream f1;
FileInfo fout = new FileInfo("Результат.txt");
StreamWriter fo = fout.CreateText();
DateTime nowсn = new DateTime();
nowсn = DateTime.Now;
tb = nowсn.Hour * 3600 + nowсn.Minute * 60 + nowсn.Second;
f1 = new FileStream("Fl_1110_Shilnikov_D.txt", FileMode.Open);
do
{
i = f1.ReadByte();
if (i != -1)
k++;
}
while (i != -1);
f1.Close();
// Console.ReadLine();
StreamReader fi = new StreamReader("Fl_1110_Shilnikov_D.txt", Encoding.GetEncoding(1251));
while ((s = fi.ReadLine()) != null)
{
l = s.Length;
L = L + l + 2;
q++;
fo.WriteLine(string.Format("\"{0:000}\";\"{1:0000}\"", a, l));
fo.WriteLine(string.Format("\"{0}", s));
a = L;
}
fo.WriteLine(string.Format("Количество записей: {0}", q));
fo.WriteLine(string.Format("Объем полезной информации: {0}", k - (q * 2)));
fi.Close();
nowсn = DateTime.Now;
te = nowсn.Hour * 3600 + nowсn.Minute * 60 + nowсn.Second;
fo.WriteLine
(string.Format("\"Время открытия:{0:00000}\";\"Время закрытиия:{1:00000}\";\"Время чтения файла:{2:000000}\"", tb, te, te - tb));
fo.Close();
}
}
}
Данная программа создает текстовый документ в котором записывается количество записей в файле, объем полезной информации в файле, длина каждой записи файла, смещение каждой записи в файле. время чтения файла, включая время открытия и закрытия файла.
Применив данную программу ко всем семи нашим текстовым документам, создадим и заполним таблицу 4, отображающую результаты эксперимента:
Таблица №4. Результаты эксперимента.
Имя файла | Количество записей в файле | Объем полезной информации в файле | Время чтения файла (мс) | Среднее время добавления записи (мс) |
Fl_1110_Shilnikov_D.txt | 4444160 Байт | 0,007659 | ||
F2_1310_Shilnikov_D.txt | 5237760 Байт | 0,008902 | ||
F3_1510_Shilnikov_D.txt | 6031360 Байт | 0,008409 | ||
F4_1710_Shilnikov_D.txt | 6824960 Байт | 0,01032 | ||
F5_1910_Shilnikov_D.txt | 7635160 Байт | 0,008667 | ||
F6_2110_Shilnikov_D.txt | 8413960 Байт | 0,008063 | ||
F7_2310_Shilnikov_D.txt | 9205760 Байт | 0,007658 |
Определим среднее время чтения записи, для того чтобы сравнить его со средним значением времени создания записи.
Среднее время чтения записи можно найти по формуле: t=T/c, где t – это среднее время чтения записи, T – это время чтения файла, с – это количество записей в файле.
Проведем вычисления для всех файлов:
Для 1-го файла: 549 / 71040=0.00014 с;
Для 2-го файла: 752 / 83840=0.00016 с;
Для 3-го файла: 818 / 96640=0.00018 c;
Для 4-го файла: 1136 / 109440=0.0002 c;
Для 5-го файла: 1065 / 122240=0.0002 c;
Для 6-го файла: 1094 / 135040=0.00021 c;
Для 7-го файла: 1137 / 147840=0.00021 c.
Построим график изменения среднего времени чтения записи от объема файла в записях, используя табличный процессор Excel, график изображен на рис.3:
Рис. 3. График изменения среднего времени чтения
записи от объема файла в записях.
По результатам экспериментов, отображенных в таблицах и на графиках можно сделать вывод:
Время записи данных в файл и время чтения данных из файла прямо пропорционально зависят от объема информации, которую требуется записать в файл или же прочитать из файла.