ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 16.10.2024
Просмотров: 21
Скачиваний: 0
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Seek (Номер).
Результатом вызова функции Seek будет текущая позиция, которую занимает указатель в файле с заданным Номером.
Следует отметить, что в названиях дисков, каталогов и файлов можно указывать как прописные, так и строчные буквы, хотя для Windows или языка Visual Studio в данном случае они означают одно и то же.
Пример 1. Требуется на диске С: создать каталог TEXT и назначить его рабочим, затем в нём в свою очередь, создать файлы a1.bin и a2.bin. После этого необходимо заполнить файл a1.bin значениями массива arrA, состоящего из 10 элементов типа Integer, которые четвёртые степени целых чисел от 1 до 10. Затем требуется извлечь содержимое файла a1.bin в массив arrB, в котором после этого необходимо вычислить квадратные корни всех элементов. Последней операцией должно быть занесение содержимого массива arrB в файл a2.bin. После выполнения всех действий оба файла необходимо закрыть и удалить. Затем назначить рабочим тот каталог C:\Program Files, после чего удалить TEXT (рис. 3).
Рисунок 3 – Приложение «Типизированные файлы
1.2. Текстовые файлы
Содержимым текстовых файлов является последовательность строк произвольной длинны, которые были созданы при помощи кого-либо текстового редактора. При этом в конце каждой строки находится особое сочетание символов, которое означает её окончание и состоит из «возврата каретки» (код в таблице символов = 13) и «перевода строки» (код 10). В дополнение к сказанному следует заметить, что любой файл, независимо от типа, всегда завершается специальным символом «конец строки» (код = 26).
Хранение числовых данных в текстовых файлах не является эффективным, т.к. каждый элемент будет представлен в виде последовательности символов. Следовательно, если необходимо хранить в файле, например, восьмизначные числа (тип Long), которые занимают в памяти 4 байта, то для каждого из них в текстовом файле будет отведено 8 байт – по 1 байту на один символ.
Операции с текстом должны выполняться построчно, при этом после обработки очередной строки указатель автоматически перемещается на следующую строку. Если в ходе выполнения программы необходимо проверить условие достижения конца файла, то следует применять функцию Eof (номер), результатом которой является логическое значение (True или False).
1. Открытие файла. Для того, чтобы открыть текстовый файл, используется оператор Open следующего формата:
Open <путь> For <назначение> As <номер>
Здесь, в отличие от формата, применяемого при работе с двоичными файлами, после служебного слова For в качестве назначения для открываемого файла используются:
Input – файл открывается для считывания из него информации;
Output – файл открывается для редактирования его содержания;
Append – файл открывается для добавления в него новых строк.
При использовании в операторе Open ключевого слова Input открываемый файл должен существовать, в противном случае возникает ошибка. С другой стороны, служебные слова Output и Append можно применять как для открытия, так и для создания текстовых файлов. При этом, если файл уже открыт, например, для извлечения данных, то для добавления строк его необходимо вначале закрыть (Close), а затем открыть с указанием соответствующего назначения.
2. Добавление строк. Для добавления новых строк в файл используется оператор Print, формат которого следующий:
Print # номер, переменная
При выполнении данного оператора в конец файла с указанным номером, открытого при помощи ключевого слова Append, будет добавлена новая строка из переменной.
Для изменения содержимого имеющегося текстового файла его необходимо вначале открыть с помощью служебного слова Output, а затем воспользоваться описанным выше оператором Print. В этом случае изменения будут внесены в начало файла.
3. Извлечение информации из файла. В языке Visual Studio существуют несколько возможных вариантов извлечения информации из текстового файла.
Оператор Line Input – используется для занесения в программу переменных строк из файла. Синтаксис этого оператора следующий:
Line Input # номер, переменная
Функция Input – применяется для извлечения в строковую переменную заданного количества символов из файла и имеет следующий формат:
Input (число, номер)
Результатом вызова данной функции является указанное число символов, скопированных из файла с определённым номером.
Пример 2. Требуется создать на диске С каталог Text, в котором необходимо создать текстовый файл a.txt и занести в него информацию, состоящую из нескольких строк.
П осле этого файл следует закрыть и затем открыть его в режиме чтения, одновременно с этим нужно создать новый файл b.txt и скопировать в него все строки из a.txt. Затем требуется добавить в b.txt ещё одну строку и определить размер обоих файлов. После всех выполненных действий необходимо закрыть оба файла, удалить их, а также удалить каталог Text (рис. 4).
Рисунок 4 – Приложение «Текстовые файлы»
1.3. Нетипизированные файлы
Информация в нетипизированных файлах хранится в виде набора одинаковых записей определённой структуры. Размер одной записи является значением суммы размеров всех её полей.
1. Открытие файла. Для того, чтобы открыть файл записей, необходимо воспользоваться оператором Open, аналогично рассмотренным ранее типам файлов. Однако его формат в этом случае несколько отличается от предыдущих, так как необходимо указывать размер записей, которые содержаться в файле:
Open путь [For Random] As номер Len=размер
В этом случае в операторе Open указывать тип с использованием служебного слова [For Random] необязательно, так как данный режим используется по умолчанию. Размер используемых записей задаётся при помощи ключевого слова Len. При этом, если запись, добавляемая в файл будет больше указанного размера, то в результате выполнения операции возникает ошибка.
2. Занесение в файл и извлечение из файла. Для занесения содержимого записи в файл используется оператор Put, как при работе с двоичными файлами:
Put номер, позиция, переменная
Отличие заключается в том, что под позицией понимается порядковый номер записи в нетипизированном файле.
Аналогичным образом, для извлечения определённой записи из файла в переменную соответствующего типа применяется оператор Get:
Get номер, позиция, переменная
В этом операторе также, как и в операторе Put, позицией является порядковый номер записей в файле.
Пример 3. Необходимо описать в программе следующую структуру для записей, которую следует назвать Session:
Name As String*30
Number As Long
Phisics As Byte
Math As Byte
Progr As Byte
And Type
После этого требуется создать на диске С: каталог Record, в котором необходимо создать файл записей a.dat и записать в него 2 одинаковые записи типа Session при помощи переменной Rec1. Затем нужно извлечь вторую запись из файла в переменную Rec2, после чего изменит в ней значения полей Name, Number, Progr. Отредактированную запись следует вновь поместить в файл a.dat с порядковым номером 2. После всех выполненных действий следует закрыть a.dat, удалить его, а также удалить каталог Record (см. рис. 5).
Рисунок 5 – Приложение «Нетипизированные файлы»
Раздел 2. ПРОЕКТИРОВАНИЕ ИНФОРМАЦИОННОЙ СИСТЕМЫ
2.1 Определение требований системы
-
-
Основными требованиями к разрабатываемой программе являются: -
1. Удобство использования -
2. Простота интерфейса -
3. Выполнение определённы функций:
-
Открытие файла. -
Отображение его основных характеристик. -
Копирование. -
Перемещение. -
Переименование. -
Вывод информации о текстовом файле. -
Вывод сообщений о удачном перемещении, переименовании, копировании.
-
Вывод сообщений о не найденном файле, ошибке и т.д.
Обычно при проектировании изображают систему графически, поскольку человеку легко разобраться в таком представлении. Именно поэтому вместо написания громоздких текстов про каждую возможность будущей программы строят различные диаграммы для описания своих систем. Это помогает не забывать, что нужно реализовать в программе. При проектировании приложения в рамках данного курсового проекта была построена UML Use Case диаграмма (Рис. 6).
Рисунок 6 – UML Use Case диаграмма
2.2 Выбор средств реализации
Для получения информации о файле, изменения атрибутов, переименования, перемещения, копирования, вывода информации о *.txt-файле будут использованы библиотеки Net Framework и интегрированная среда разработки Visual Studio 2019.
Visual Studio – это стартовая площадка для написания, отладки и сборки кода, а также последующей публикации приложений
Visual Studio представляет собой полностью интегрированную среду разработки. Она спроектирована таким образом, чтобы делать процесс написания кода, его отладки и компиляции в сборку для поставки конечным потребителям как можно более простым. На практике это означает, что Visual Studio является очень сложным приложением с многодокументным интерфейсом, в котором можно делать практически все, что касается разработки кода.
2.3 Описание программы
Использование пространств имен Net Framework
-
System – cодержит классы, позволяющие сопоставлять коды URI с шаблонами URI и группами шаблонов URI. -
System.Collections.Generic – содержит интерфейсы и классы, определяющие универсальные коллекции, которые позволяют пользователям создавать строго типизированные коллекции, обеспечивающие повышенную производительность и безопасность типов по сравнению с неуниверсальными строго типизированными коллекциями. -
System.Drawing – содержит типы, поддерживающие базовые графические функции GDI+. Дочерние пространства имен поддерживают более сложные функции двухмерной и векторной графики, дополнительные функции обработки изображений, а также службы, связанные с печатью и типографикой. Дочернее пространство имен также содержит типы, которые расширяют логические и графические возможности пользовательского интерфейса во время разработки. -
System.ComponentModel - содержит классы, реализующие поведение компонентов и элементов управления во время проектирования и выполнения. Данное пространство имен включает базовые классы и интерфейсы, предназначенные для реализации преобразователей атрибутов и типов, для привязки к источникам данных и для лицензирования компонентов. -
System.Data - обеспечивает доступ к классам, которые представляют архитектуру ADO.NET. Архитектура ADO.NET позволяет создавать компоненты, эффективно работающие с данными из различных источников. -
System.Text – содержит типы для работы с кодировками символов и для управления строками. Дочернее пространство имен позволяет обрабатывать текст с использованием регулярных выражений. -
System.Linq - содержит классы и интерфейсы, которые поддерживают запросы, использующие LINQ (Language-Integrated Query). -
System.Windows.Forms – содержит классы для создания приложений Windows, которые позволяют наиболее эффективно использовать расширенные возможности пользовательского интерфейса, доступные в операционной системе Microsoft Windows. -
System.IO – содержит типы, поддерживающие ввод и вывод, включая возможности чтения и записи данных в потоках, как синхронно, так и асинхронно, сжатия данных в потоках, создания и использования изолированных хранилищ, сопоставления файлов логическим адресным пространствам приложений, хранения различных объектов данных в одном контейнере, взаимодействия с использованием анонимных или именованных каналов, реализации пользовательского ведения журнала и обработки входящих и исходящих потоков данных в последовательных портах.
2.3 Использованные классы .NetFramework
Далее будут перечислены основные классы и функции .NetFramework которые использовались для разработки данного приложения. К информации о классе прилагается участок кода программы (некоторые из них с комментарием). А так же будут описаны статические методы и методы экземпляра, пространство имён где они находятся, их значения.
FileInfo – Класс FileInfo предоставляет методы экземпляра для создания, открытия, удаления, переименования, копирования, перемещения, а так же добавления данных в файлы.
Открытие:
{
fileinf = new FileInfo(openFileDialog1.FileName);
update_fname_info(fileinf.Name);
label2.Visible = true;
label2.Text = "Информация о файле:\n"
+ "Размер: "+fileinf.Length.ToString()+" байт.\n"
+ "Создан: "+fileinf.CreationTime.ToString()
+ "\nИзменён: " + fileinf.LastWriteTime.ToString()
+ "\nОткрыт: " + fileinf.LastAccessTime.ToString();
Переименование:
Form3 form_rename = new Form3(); //Создаём форму 3 - окно переименования
form_rename.textBox1.Text = fileinf.Name;
form_rename.ShowDialog(); //выводим форму
if (form_rename.change_name == true) //проверяем, изменили имя файла или нет
{
try
{
fileinf.MoveTo(fileinf.DirectoryName +@"\" +form_rename.textBox1.Text);
update_fname_info(fileinf.Name); //обновляем в программе название файла
}
Перемещение:
if (check_exists(fileinf.FullName))
{
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
fileinf.MoveTo(folderBrowserDialog1.SelectedPath + @"\" + fileinf.Name);
MessageBox.Show("Файл перемещён в " + folderBrowserDialog1.SelectedPath.ToString());
}
Копирование:
if (check_exists(fileinf.FullName))
{
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
fileinf.CopyTo(folderBrowserDialog1.SelectedPath + @"\" + fileinf.Name);
MessageBox.Show("Файл скопирован в " + folderBrowserDialog1.SelectedPath.ToString());
TextReader – Представляет средство чтения, позволяющее считывать последовательные наборы знаков.
Класс TextReader является абстрактным, базовым классом для StreamReader, который считывает символы из потоков. Производный класс StreamReader позволяет открыть текстовый файл для чтения указанного диапазона символов или создать средство чтения на основе существующего потока.
TextReader reader = new StreamReader(fileinf.OpenRead()); // создаём объект для чтение содержимого файла
while (true)
{
cur_line = reader.ReadLine(); //считываем 1 строку
if (cur_line != null) //Если строка существует
{
str_have_sym = false;
for (int i = 0; i < cur_line.Length; i++)
{
sym_all++; //считаем все символы
-
Exception – Представляет ошибки , происходящие во время выполнения приложения. -
File – Предоставляет статические методы для создания, копирования, удаления, перемещения и открытия файлов, а так же его можно использовать для получения и задания атрибутов.
Все методы класса статические, поэтому, если необходимо выполнить только одно действие, более эффективным может оказаться использование метода File, а не соответствующего экземпляра метода FileInfo.