Vb6 работа меню файловой системы примеры кода. Программирование в Объектной Модели FSO
Каждая программа должна сохранять данные на диск и читать их с диска. Это необходимо, например, для сохранения настроек программы, вряд ли пользователю понравится программа, которую при следующем запуске придется настраивать заново.
В данной статье речь пойдет о работе с текстовыми файлами средствами 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 # Номер_файла , при этом, # Номер_файла указывать не обязательно.
Статья немного сыровата, но для начинающих программистов будет полезна. В следующий раз я расскажу о работе с бинарными файлами.
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
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 – имя оператора.
Контрольные вопросы для самопроверки
- Как можно долгосрочно хранить некоторую информацию?
- Что такое файл?
- Какие имена файлов вы знаете?
- Приведите синтаксис оператора «Open ». Поясните назначение его параметров.
- Как можно организовать совместный доступ нескольких приложений к одному файлу одновременно?
- Как определить, что информация в файле исчерпана?
- Почему после работы с файлом его рекомендуется закрывать?
- В чем вы видите разницу режимов текстового и бинарного файлов?
- Как происходит считывание и запись данных в режиме текстового файла?
- Как происходит считывание и запись данных в режиме бинарного файла?
- В чем разница операторов «Print » и «Write » при работе с файлами?
- В чем разница операторов «Input » и «Line Input » при работе с файлами?
- Как можно работать с графическими данными?
- Каковы основные принципы работы с реестром Windows ?