Контакты

Объекты Файловой системы.

Windows

Цель работы: Изучение и использование операторов языка VB 6 для работы с файлами различных типов: последовательными (текстовыми) файлами, файлами произвольного доступа, бинарными файлами. Исследование и использование инструмента Common Dialog для открытия и сохранения файлов, выбора шрифта и цвета, а также использование объекта Clipboard для хранения фрагментов текста, – на примере создания простого текстового редактора.

Контрольные вопросы:

1. Какими способами можно открыть текстовый файл? Как закрыть текстовый и любой другой открытый файл?

2. Как записываются данные в открытый для записи текстовый файл? В чем разница между операторами Write и Print?

3. Как читаются данные из открытого для чтения текстового файла? Чем отличаются друг от друга операторы Input и Line Input? При помощи какой функции можно прочитать из файла заданное число символов? Как прочитать все символы файла?

4. Что такое пользовательский тип данных и как используется это понятие при работе с файлами произвольного доступа (raf )?

5. С помощью каких операторов из файла raf читаются записи и в файл raf пишутся новые записи?

6. С какой целью определяется и используется индекс при работе с файлом raf ?

7. Каковы особенности использования бинарных файлов? Как они открываются? Как производится чтение из бинарного файла и запись в бинарный файл?

8. Как можно применить элемент управления Common Dialog для загрузки содержимого текстового файла в текстовое поле? Как с помощью того же элемента управления сохранить отредактированный текст в текстовом файле?

9. Как можно применить элемент управления Common Dialog для загрузки содержимого файла rtf в поле Rich Textbox ? Как с помощью того же элемента управления сохранить отредактированный текст в файле rtf ?

10. Как можно применить элемент управления Common Dialog для изменения значений параметров шрифта и для изменения цвета текста в окне Textbox (или выделенного фрагмента текста в окне Rich Textbox )?

Пример 7.1. Рассмотрим приложение, демонстрирующее запись в текстовый файл (и чтение из текстового файла) «сведений о сотрудниках» – строк, каждая из которых содержит идентификационный номер, ФИО, дату рождения и место рождения сотрудника. Строки образуют таблицу, которую на экранной форме будут имитировать 4 элемента управления Combo Box (рис. 7.1), образующие массив объектов Comb(i), у которых свойство Style имеет значение 1 – SimpleCombo.

Выделите удаляемую строку", vbExclamation

Comb(j).RemoveItem i

‘ Вставка новой записи в таблицу:

Private Sub mnuInsert_Click()

i% = Comb(0).ListIndex

If i < 0 Then

MsgBox "Выделите строку для вставки перед ней", vbExclamation

Comb(0).AddItem InputBox("Введите номер"), i

Comb(1).AddItem InputBox("Введите фио"), i

Comb(2).AddItem InputBox("Введите дату рожд."), i

Comb(3).AddItem InputBox("Введите место рожд."), i

‘ Изменение записи в таблице:

Private Sub mnuUpdate_Click()

i% = Comb(0).ListIndex

If i < 0 Then

MsgBox "Выделите изменяемую строку", vbExclamation

Comb(0).List(i) = InputBox("Введите номер", Comb(0).List(i))

Comb(1).List(i) = InputBox("Введите фио", Comb(1).List(i))

Comb(2).List(i) = InputBox("Введите дату рожд.", Comb(2).List(i))

Comb(3).List(i) = InputBox("Введите место рожд.", Comb(3).List(i))

‘ Очистка всей таблицы:

Private Sub mnuClear_Click()

‘ Заполнение таблицы сведениями из текстового файла:

Private Sub mnuLoad_Click()

Open "person. txt" For Input As #1

Input #1, numb, fio, bdate, bloc

Comb(0).AddItem numb

Comb(1).AddItem fio

Comb(2).AddItem bdate

Comb(3).AddItem bloc

‘ Запись сведений таблицы в текстовый файл:

Private Sub mnuSave_Click()

N% = Comb(0).ListCount

Open "person. txt" For Output As #1

For i = 0 To N - 1

numb = Val(Comb(0).List(i))

fio = Comb(1).List(i)

bdate = CDate(Comb(2).List(i))

bloc = Comb(3).List(i)

Write #1, numb, fio, bdate, bloc

‘ Завершение работы приложения:

Private Sub mnuExit_Click()

Пример 7.2 . Рассмотрим приложение, которое демонстрирует использование элементов управления Common Dialog для открытия и сохранения файла, для выбора шрифта и цвета, а также для редактирования текста.

Файл формата TXT будет загружаться в текстовое поле (левое поле на рис. 7.2), а файл формата RTF – в поле Rich Textbox (правое поле на рис. 7.2).

объекта

Класс

объекта

Свойство

объекта

Значение свойства

“Панели общего

диалога”

Закладка Open / Save As

Закладка Font

Закладка Color

В таблице не предствавлены свойства команд меню Font , Color и Edit . Ниже приводится код процедур также лишь для команд меню File (Open , Save и Save As ). Составление кода для других команд меню – тема 2-го задания данной работы.

Private Sub mnuOpen_Click()

CommonDialog1.ShowOpen

F$ = CommonDialog1.FileName

If Right(F, 3) = "rtf" Then

RichTextBox1.LoadFile F

ElseIf Right(F, 3) = "txt" Then

Open F For Input As #1

S$ = Input(N, 1)

Private Sub mnuSave_Click()

CommonDialog1.ShowSave

F$ = CommonDialog1.FileName

Private Sub mnuSaveAs_Click()

CommonDialog1.ShowSave

F$ = CommonDialog1.FileName

RichTextBox1.SaveFile F, rtfRTF

В ходе выполнения данной работы студент должен выполнить 2 задания.

Задание 1. В процессе выполнения задания студенты осваивают имеющиеся в VB 6 возможности работы с файлами произвольного доступа (RAF – random access file ).

Для заданной таблицы базы данных объявляется пользовательский тип данных, объявляется переменная этого типа (учебное пособие , стр. 108 – 112), составляются и отлаживаются процедуры, в которых используется переменная пользовательского типа.

В частности реализуются процедуры для команд меню Записать в файл RAF и Читать из файла RAF . Как и в примере 7.1, для редактирования данных используется массив объектов Combo Box и меню Edit с пятью командами подменю: Добавить запись , Удалить запись , Вставить запись , Изменить запись , Очистить таблицу .

Вариант 1 .

Объявить пользовательский тип данных для таблицы «Автомобиль» (табл. 7.1) базы данных «Автосервис».

автомобиля

автомобиля

неисправности

В нижней строке таблицы 7.1 – типы полей.

Вариант 2 .

Объявить пользовательский тип данных для таблицы «Неисправности» (табл. 7.2) базы данных «Автосервис».

неисправности

Название

неисправности

Стоимость

В нижней строке таблицы 7.2 – типы полей.

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

Задание 2. В ходе выполнения задания студенты дополняют приложение примера 2 новыми возможностями, которые позволяют рассматривать это приложение как простой текстовый редактор.

Вариант 1 Common Dialog реализовать команды меню Font и Color (с подменю Цвет символов и Цвет фона ). С помощью этих команд должен обеспечиваться выбор шрифта (его наименования, начертания и размера) для выделенного фрагмента текста в окне Rich Textbox , а также выбор цвета символов выделенного фрагмента и выбор цвета фона всего этого окна.

Указание: При настройке объекта Common Dialog для выбора шрифта с помощью свойства (Custom) обязательно следует установить значение свойства Flags равным 1, 2 или 3 (см. пособие , стр. 183).

Вариант 2 . С помощью элемента управления Common Dialog реализовать команды меню Edit (подменю Copy , Cut и Paste ), назначением которых является копирование или удаление в буфер обмена выделенного фрагмента текста, а также вставка в выделенное место текста содержимого буфера обмена.

Указание: К буферу обмена (объекту Clipboard ) можно применять методы SetText и GetText:

Clipboard. SetText RichTextBox1.SelText

RichTextBox1.SelText = Clipboard. GetText

Каждая программа должна сохранять данные на диск и читать их с диска. Это необходимо, например, для сохранения настроек программы, вряд ли пользователю понравится программа, которую при следующем запуске придется настраивать заново.

В данной статье речь пойдет о работе с текстовыми файлами средствами Visual Basic.

Дескриптор файла

Для работы с файлами операционная система использует каналы ввода/вывода, т.е. каждый открытый файл имеет свой номер.

В Visual Basic существует функция FreeFile , которая возвращает номер свободного канала, который можно использовать для работы с файлом. Если свободных каналов нет, то возникает ошибка.

FreeFile [ (RangeNumber ) ]

RangeNumber -необязательный параметр, который позволяет определить диапазон значений свободных каналов, если RangeNumber = 0 (по умолчанию), то возвращается номер канала из диапазона 1 - 255, а если 1, то из диапазона 256 - 511.

MyFile = FreeFile " Переменной MyFile присвоен свободный канал и теперь ее можно использовать для работы с файлами

Работа с текстовыми файлами

Наиболее часто приходится встречаться с текстовыми файлами. Текстовые файлы состоят из набора символов ASCII (American Standard Code for Information Interchange - Американский стандартный код для обмена информацией).

Прежде чем начать записывать/считывать данные, файл необходимо открыть, делается это при помощи оператора Open (Имя_файла ) For As # Номер_файла , где:

Input - открыть файл для чтения, если файл не существует, то возникает ошибка;

Output - для записи, если файл не существует, то он будет создан, а если файл существует, то он будет перезаписан;

Append - для добавления, если файл не существует то он будет создан, а если файл существует, то данные будут добавляться в конец файла.

Чтение текстовых файлов можно производить двумя способами: читать посимвольно, для этого используется функция Input(Количество_считываемых_символов , #Номер_файла ) и построчно, для этого используется функция Line Input # Номер_файла , Куда_считывать .

Dim MyFile

Dim S As String "Переменная для хранения считанных данных

MyFile = FreeFile

Open ("C:\TEST.txt") For Input As #MyFile

Line Input #MyFile, S "Считываем первую строку из файла TEST.TXT в переменную S

Dim MyFile "Объявляем переменную для свободного файла

Dim i As Integer "Переменная для цикла

Dim tS As String "Переменная для считывания строк

Dim S As String "Переменная для хранения окончательных данных

MyFile = FreeFile " Присваиваем свободный канал, для работы с файлами

"Открываем файл TEST.TXT для чтения

For i = 1 To 5

Line Input #MyFile, tS "Читаем файл TEST.TXT построчно

If i => 5 Then S = tS "Если пятая строка, то запоминаем ее в переменную S

Next i

Close #MyFile "Закрываем файл

Dim MyFile "Объявляем переменную для свободного файла

Dim S As String "Переменная для хранения считанных данных

MyFile = FreeFile " Присваиваем свободный канал, для работы с файлами

Open ("C:\TEST.txt") For Input As #MyFile "Открываем файл TEST.TXT для чтения

S = Input$(LOG(1), 1) "Считываем весь файл в переменную S

Close #MyFile "Закрываем файл

Для записи в файл существуют операторы Print # Номер_файла , Данные и Write # Номер_файла , Данные . Отличает эти операторы только то, что Write записывает данные в кавычках, а Print без кавычек.

Ниже следующий код создаст на диске C:\ новый файл TEST.TXT и запишет в него две строки, первую без кавычек, а вторую в кавычках:

Dim MyFile "Объявляем переменную для свободного файла

MyFile = FreeFile " Присваиваем свободный канал, для работы с файлами

Open ("C:\TEST.txt") For Output As #MyFile "Открываем файл TEST.TXT для записи

Print #MyFile, "Эта строка записана оператором Print, она без кавычек…"

Write #MyFile, "Эта строка записана оператором Write, она в кавычках…"

Close #MyFile "Закрываем файл

Вот собственно и все. Как вы уже наверно поняли, для закрытия файла служит оператор Close # Номер_файла , при этом, # Номер_файла указывать не обязательно.

Статья немного сыровата, но для начинающих программистов будет полезна. В следующий раз я расскажу о работе с бинарными файлами.

8. СОХРАНЕНИЕ И СЧИТЫВАНИЕ ИНФОРМАЦИИ

Чтобы после завершения работы программы все данные, созданные в памяти, не пропали, нужно уметь сохранять информацию на жестком диске. В противном случае вся информация бесследно исчезнет. Сохранять данные и считывать их можно различными способами. Для работы с информацией различного объема и формата можно использовать двоичные и текстовые файлы. Для хранения малых объемов информации можно использовать реестр Windows . А для самых сложных задач разумно воспользоваться базами данных.

8.1. Открытие файлов с помощью оператора « Open »

Файл – именованная область любого внешнего накопителя информации. Данные «живут» в памяти компьютера, а файлы – на жестком диске. Программа не работает с файлами напрямую, а использует в качестве посредника операционную систему.

Имена файлов бывают двух видов: полные – помимо имени файла указывается также местоположение файла на внешнем носителе (например «C:\Program Files\Microsoft Visual Studio\VB98\VB 6.EXE ») и краткие – только имя файла (VB 6.EXE ). Если местоположение файла не указано, то он будет искаться в текущей папке, по умолчанию – папка, где находится ваше приложение. Непосредственное имя файла состоит из двух частей: собственно уникальное имя файла и его расширение. Собственно имя идентифицирует файл, а расширение обычно указывает на формат файла или на то, какой программой он создан.

Перед началом работы с файлом необходимо запросить у операционной системы указатель (дескриптор ) файла . Для его получения пользуются функцией «FreeFile ». Затем с помощью оператора «Open » этот указатель связывается с необходимым файлом. Только после этого программа сможет работать с ним. Синтаксис открытия файла следующий:

‘получаем свободный указатель файла и присваиваем его переменной

FileHandle% = FreeFile

‘ открываемфайл

Open FilePath _

As [#]FileHandle%

...(работасфайлом)

Close [#]FileHandle

· FileHandle % – переменная, в которой хранится указатель файла;

· FreeFile – имя функции, возвращающей указатель файла;

· Open – имя оператора;

· FilePath – полное имя файла;

· For – ключевое слово, за которым идет описание режима доступа к файлу;

· Mode – режим доступа к файлу (см. табл. 15);

Таблица 15

Режимы доступа к файлу

Режимы доступа

Описание

Append

Добавление данных в конец существующего текстового файла. Если файл не существует, он будет создан

Binary

Открытие файла в двоичном режиме, т.е. в виде набора байтов. Если файл не существует, но будет создан

Input

Открытие файла для чтения в текстовом формате

Output

Открытие файла для записи текстового файла. При этом вся старая информация будет удалена. Если файл не существует, но будет создан

Random

Открытие файла в режиме произвольного доступа. Такой режим используется для работы с простыми записями. Если файл не существует, но будет создан

· Access – необязательное ключевое слово, за которым следует описание типа доступа;

· AccessType – описание типа доступа:

· Read – чтение;

· Write – запись;

· Read Write – чтение и запись.

Примечание

При режимах доступа Append и Output доступен только тип доступа Write , при Input – только Read , а при Binary и Random доступны все три типа доступа.

· LockType – необязательный параметр, определяющий, смогут ли другие программы использовать этот файл, пока с ним работает ваша программа. Обычно оно связано с работой в сети (см. табл. 16).

Таблица 16

Возможные значения параметра LockType

Значение

Описание

Shared

К файлу будут иметь полный доступ все пользователи с необходимыми правами

Lock Read

Блокируется чтение файла, а запись разрешена

Lock Write

Блокируется запись в файл, а чтение разрешено

Lock Read Write

Запрещается и чтение, и запись в него

· As – ключевое слово, за которым следует указатель файла.

· # – символ, указывающий, что следующее за ним значение является указателем файла.

· Len – необязательное ключевое слово, за которым должен следовать параметр, определяющий длину записи.

· CharInBuffer % - длина записи для файла, открытого в режиме произвольного доступа (Random ).

· Close – оператор, закрывающий файл, связанный с указанным дескриптором.

Важно закрывать файл после окончания работы с ним. Оператор «Close » освобождает указатель файла и связанную с ним область памяти.

При работе с файлом, а именно при чтении из него, очень важно определение конца файла. Его можно определить с помощью функции EOF (End Of File ):

EOF (FileHandle )

· EOF – имя функции;

· FileHandle – указатель файла, конец которого определяется.

Функция возвращает True (истина), если конец файла достигнут, в противном случае возвращается False (Ложь).

8.2. Чтение и запись в текстовой файл

Текстовой файл открывают в режиме доступа «Input », «Output » или «Append » (см табл. 15). Особенность этого режима в том, что в нем работают только с конкретными печатаемыми символами. Со служебными символами работать бесполезно.

Для записи информации используют два оператора «Print » и «Write », синтаксис которых следующий:

Print #FileHandle%, VarBuffer [;]

Write #FileHandle%, VarBuffer [;]

· Print /Write – ключевые слова операторов.

· #FileHandle % - указатель файла, в который будет помещена информация.

· VarBuffer – значение, которое будет записано в файл.

· ; – необязательный параметр, использующийся при записи в текстовой файл, означает, что следующее значение будет записано в эту же строчку, а при его отсутствии – в следующую.

Для чтения информации из файла применяют операторы «Input » и «Line Input ». Синтаксисиханалогичендругдругу:

Line Input #FileHandle%, VarBuffer

Input #FileHandle%, VarBuffer

· Line Input / Input – ключевые слова операторов.

· #FileHandle % - указатель файла, из которого будет считана информация.

· VarBuffer – переменная, в которую будет считываться информация.

Разница операторов «Line Input » и «Input » состоит в том, что первый предназначен только для текстовых файлов, а второй – для любых. В случае текстовых файлов «Input » считывает данные, находящиеся в одной строчке, до первого разделителя (для текстовых данных разделителем является «,» (запятая), а для числовых – « » (пробел) и «,»), а «Line Input » считывает сразу всю строку, игнорируя любые разделители.

Примечание

В Visual Basic нет средств контроля формата ранее созданных файлов. Поэтому символ «2» может быть считан как соответствующее число и наоборот.

8.3. Работа с бинарными файлами

Файлы открываются в бинарном формате оператором «Open » в режиме «Binary ». Отличительной чертой этого режима является то, что работа с файлом ориентирована исключительно на конкретные байты. Поскольку Visual Basic может адресоваться напрямую к нужному месту файла, этот режим также называется – режимом прямого доступа . Другая особенность этого режима – наличие возможности одновременной записи и считывания информации в разные части файла не переоткрывая его. Запись в файл, открытый в бинарном режиме, осуществляется следующим синтаксисом:

Put #FileHandle%, , NameVar

· Put – имя оператора записи информации.

· RecNumber – номер байта файла, в который будет записана информация (необязательный параметр).

· NameVar – переменная, содержимое которой будет записано в файл.

Считывание информации из файла в бинарном режиме происходит с помощью следующего оператора:

Get #FileHandle%, , NameVar

· Get – имя оператора записи информации.

· FileHandle % - файловый указатель.

· RecNumber – номер байта файла, из которого будет считана информация (не обязательный параметр).

· NameVar – имя переменной, в которую будет помещена считанная информация.

Поскольку бинарный режим ориентирован на байты информации, то при чтении из файла буферная переменная должна иметь строго определенный тип: либо «Byte », тогда будет считано числовое значение байта, либо символьный фиксированной длины в один символ, тогда байт будет считан в виде символа, ANSI , код которого соответствует величине байта. Этот символ может быть даже управляющий, чего нельзя добиться в случае с текстовыми файлами.

Примечание

При отсутствии параметра «RecNumber » запись или считывание информации будет происходить в следующем байте файла после того, с которым до этого работали.

8.4. Манипуляции графикой

Сохранять в файлах и извлекать из них можно и графические изображения. Чтобы извлечь из растрового файла или файла пиктограммы и присвоить его свойству «Picture » элементов управления «PictureBox » и «Image », используется функция «LoadPicture ()» со следующим синтаксисом:

ImageCtrl.Picture = LoadPicture(FilePath)

· ImageCtrl – имя элемента управления окном с рисунком, элемента управления изображением или формы;

· LoadPicture – имя функции;

· FilePath – полное имя файла.

SavePicture ImageCtrl .Picture, FilePath

· SavePicture – имя оператора;

· ImageCtrl – имя элемента управления окном с рисунком, элемента управления изображением или формы;

· Picture – имя свойства объекта, отвечающее за изображение;

· FilePath – полное имя файла с указанием его расположения на диске.

8.5. Работа с данными в реестре

Для хранения небольших фрагментов информации символьного формата можно использовать реестр Windows . В Visual Basic имеются четыре процедуры, которые можно использовать для доступа к нему. Они очень просты в применении, но имеют один главный недостаток: можно получить доступ к данным только из определенного раздела реестра: «MyComputer \HKEY _CURRENT _USER \Software \VB and VBA Program Settings ». Чтобы получить доступ к другим разделам реестра, нужно воспользоваться специальными функциями «Win 32 API ».

Чтобы получить значение параметра из посвященного Visual Basic раздела реестра Windows , нужно использовать следующую функцию:

MyString = GetSetting(VBKeyName, Section, Key [,Default])

· MyString – строка для хранения возвращаемого функцией значения;

· GetSetting – имя функции.

· VBKeyName – строковое значение, которое является именем внутреннего подраздела VB /VBA .

· Key – строковое значение, которое представляет имя параметра в разделе.

· Default – необязательный аргумент, значение которого будет возвращено, в случае ошибки (отсутствие параметра).

Для сохранения некоторого значения в реестре Windows используется следующий оператор:

SaveSetting VBKeyName, Section, Key, MyString

· SaveSetting – имя оператора.

· MyString – строковая переменная, в которую будет помещено найденное значение.

Для получения из реестра массива, содержащего все значения параметров из определенного подраздела, используется следующая функция:

MyVariant = SetAllSettings(VBKeyName, Section)

· MyVariant – возвращаемый функцией массив значений типа «Variant ».

· SetAllSettings – имя функции.

· Section – строковое значение, представляющее раздел или подраздел конкретного приложения.

Для удаления целого раздела параметров применяется оператор со следующим синтаксисом:

DeleteSetting VBKeyName, Section, Key

· DeleteSetting – имя оператора.

Контрольные вопросы для самопроверки

  1. Как можно долгосрочно хранить некоторую информацию?
  2. Что такое файл?
  3. Какие имена файлов вы знаете?
  4. Приведите синтаксис оператора «Open ». Поясните назначение его параметров.
  5. Как можно организовать совместный доступ нескольких приложений к одному файлу одновременно?
  6. Как определить, что информация в файле исчерпана?
  7. Почему после работы с файлом его рекомендуется закрывать?
  8. В чем вы видите разницу режимов текстового и бинарного файлов?
  9. Как происходит считывание и запись данных в режиме текстового файла?
  10. Как происходит считывание и запись данных в режиме бинарного файла?
  11. В чем разница операторов «Print » и «Write » при работе с файлами?
  12. В чем разница операторов «Input » и «Line Input » при работе с файлами?
  13. Как можно работать с графическими данными?
  14. Каковы основные принципы работы с реестром Windows ?
Понравилась статья? Поделитесь ей