Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


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



Для изменения данных в записях файла (редактирование, добавление, удаление записей) применяется оператор Put #. При его использовании необходимо иметь в виду, что данные в записи будут заменены на те, которые мы передаем в файл. Подчеркнем, что новая запись с данными не создается.

Для добавления записей в файл необходимо указывать номер записи на единицу больший номера последней записи. В этом случае запись будет добавлена в файл, а не изменена. Например:

Put #номер_файла, последняя_запись + 1, имя_переменной

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

Перейдем к описанию процесса удаления данных из файла произвольного доступа. Существуют два способа. Можно просто очистить соответствующие поля указанных записей, то есть записать в них пустые значения. Однако в этом случае в файле остаются пустые записи. Понятно, что при таком подходе ресурсы (дисковое пространство) используются нерационально.

Для окончательного удаления записей рекомендуется перезаписывать данные в новый файл, пропуская пустые записи. Алгоритм этих действий таков:

1. Создайте новый файл с помощью оператора Open.

2. Перепишите все непустые записи в новый файл, используя оператор Put #.

3. Закройте исходный файл и удалите его при помощи оператора Kill.

4. Переименуйте новый файл в исходный оператором Name.

Получаем тот же самый файл, но уже без пустых записей. При этом экономится пространство диска и время поиска данных в таком файле.

 

Работа с двоичными файлами

Двоичный файл в корне отличается от файлов последовательного и произвольного доступа. Посмотрите на рисунок. Здесь в качестве примера двоичного файла с помощью редактораNotepad системы Windows открыт выполняемый файл Visual Basic 6.

Пример двоичного файла

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

Двоичный файл открывается только в двух режимах:

· Binary — двоичный доступ по номеру байта;

· Random —произвольный доступ.

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

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

 

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

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

Open имя_файла For Binary As номер_файла

где:

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

· номер_файла — номер файла.

Чтение данных из двоичных файлов

Чтение данных из двоичных файлов выполняется с помощью оператора Get #, имеющего следующий синтаксис:

Get #номер_фалйа, [номер_записи], имя_переменной

где:

· номер_файла —номер файла;

· номер_записи — размер записи в байтах;

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

 

Запись данных в двоичные файлы

Для записи данных в двоичные файлы используется оператор Put #, имеющий следующий синтаксис:

Put [#]номер_файла, [номер_записи], имя_переменной

где:

· номер_файла —номер файла;

· номер_записи — размер записи в байтах;

· имя_переменной — переменная, в которой хранятся данные, записываемые в файл.

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

Оператор Put # работает в паре с оператором Get #.

Работа с атрибутами файлов

Для работы с атрибутами файлов используются функции GetAttr и SetAttr. Синтаксис функции GetAttr, возвращающей атрибуты файлов, следующий:

GetAttr (имя_файла)

где имя_файла — путь, включающий имя файла, папку, устройство. По умолчанию применяется текущая папка и устройство.

Функция GetAttr возвращает число, которое определяет атрибуты файла. Интерпретировать это число можно при помощи параметров, описанных в табл. 3.

Таблица 3.Константы атрибутов файлов

Константа Описание Значение
vbNormal Обычный файл
vbReadOnly Файл только для чтения
vbHidden Скрытый файл
vbSystem Системный файл
vbDirectory Каталог (папка)
vbArhive Архивный файл

 

Аналогично работает функция setAttr, выполняющая установку атрибутов файлов. Синтаксис этой функции следующий:

SetAttr имя_файла, атрибуты

где:

· имя_файла — путь, включающий имя файла, папку, устройство. По умолчанию используется текущая папка и устройство;

· атрибуты— число или выражение, задающее сумму атрибутов.

Замечание

В функции SetAttr используются все константы, описанные в табл. 3, кроме константы vbDirectory.

Для того чтобы задать несколько атрибутов, можно просто просуммировать указанные константы. Например, для установки атрибутов файла Hidden и Read-only необходимо использовать функцию setAttr следующего вида:

SetAttr " MyFile", vbHidden + vbReadOnly

При этом для файлаMyFile будут установлены атрибуты Hidden и Read-only.

 

В языке Visual Basic у разработчика имеются широкие возможности работы с файловой системой, которые представляют изученный ранее диалоги Common Dialog, набор файловых операторов и функций, а также файловые элементы управления.

Существует три файловых элемента управления:

1. DriveListBox (Список дисков)

2. DirListBox (Список каталогов)

3. FileListBox (Список файлов)

DriveListBox (Список дисков) .Данный элемент управления представляет собой ниспадающий список, в котором по умолчанию отображается диск, являющийся текущим. Если в процессе работы приложения пользователю нужно сменить обозначение диска, то сделать это можно двумя способами. Во-первых, при помощи мыши раскрыть список, щёлкнуть на стрелке в правой части объекта, с последующим выбором требуемого элемента. Во-вторых, задать нужное название, используя для этого стрелки управления курсором, когда объект имеет фокус.

Имеется возможность задать программным образом диск, который будет использоваться по умолчанию, т.е. который будет являться текущим при запуске приложения. Для этого следует воспользоваться свойством Drive (Устройство), присвоив ему соответствующее значение в процедуре загрузки главной формы Form_Load, например:

Private Sub Form_Load()

Drive1.Drive=”C: ”

End Sub.

 

DirListBox (Список каталогов) .Этот элемент управления представляет собой древовидную структуру, отображающую каталоги того диска, который на данный момент является текущим. Первым элементом списка является текущий диск, под которым расположены находящиеся в нём каталоги, смещённые на одну позицию вправо (корневой каталог). Если пользователь открывает один из них при помощи двойного щелчка мыши, то в этом случае список изменяется таким образом, что в нём после названия текущего каталога отображаются только название его подкаталогов, смещённые ещё на одну позицию вправо (каталог первого уровня) и т.д.

Слева от каждого элемента списка находится изображение папки. Если каталог открыт, то папка отображается раскрытой и наоборот.

Так же, как и при работе с дисками, можно установить каталог, который будет являться текущим, используя свойство Path (Путь) для элемента DirListBox, например:

Private Sub Form_Load()

Dir1.Path=”C: \Мои документы”

End Sub

С другой стороны, если значение свойства Path присвоить какой-либо переменной, то в ней будет храниться путь к выбранной папке.

a=Dir1.Path

Например, для случая, показанного на рисунке a=«G: \vb\Book.Basic_for_beginning».

Так как элемент управления DirListBox представляет собой список, то для него так же, как и для обычных списков, имеется возможность доступа к элементам и их обработки с помощью свойств List (Список), ListIndex (Текущий элемент списка), ListCount (Количество элементов в списке). Однако имеется глобальное различие в системе, используемой для обработки значения свойства ListIndex.

Для каталога, путь к которому совпадает со значением свойства Path элемента управления DirListBox, свойство ListIndex всегда равно -1, независимо от того, на каком уровне он расположен. Каталог, расположенный на один уровень выше текущего, имеет свойство ListIndex, равное -2, и т.д. Завершением этой последовательности является корневой каталог текущего диска.

Соответственно, первый по порядку подкаталог текущего каталога, имеет свойство ListIndex, равное 0. Для второго по счёту каталога ListIndex=1 и т.д.

Значением свойства ListCount для выбранного каталога является количество его подкаталогов.

FileListBox (Список файлов) .Данный элемент управления представляет собой список, отображающий файлы, которые располагаются в каталоге, указанном в свойстве Path. Как правило, этот объект используется вместе со списком каталогов (DirListBox), поэтому, когда пользователь в приложении выбирает нужный ему каталог, то в программе при этом должен выполняться следующий оператор присваивания:

File1.Path=Dir1.path

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

Для того, чтобы ограничить количество выводимых файлов каким-то именем, расширением и т.д. (т.е. шаблоном), необходимо воспользоваться свойством Pattern, которое позволяет задать один или несколько шаблонов. При этом следует заметить, что в последнем случае в качестве разделителя используется точка с запятой, например:

File1.Pattern=”*.txt; *.exe”

Для того, чтобы получить в программе доступ к оп­ределенному файлу, необходимо воспользоваться свойством FileName элемента FileListBox, установив перед этим выбран­ный пользователем каталог в качестве текущего на уровне систе­мы (оператор ChDir). Другая возможность заключается в совме­стном использовании значений: следующих свойств: Path и FileName.

Например, чтобы с помощью элементов управления найти файл, а затем открыть его и записать в него значение выражение «строка», нужно прописать следующий программный код:

‘а – переменная, в которой хранится путь

Dim a As String

‘работа с файлом

Private Sub Command1_Click()

Open a For Output As #1

Print #1, " 5"

Close #1

End Sub

‘согласование работы объектов DirListBox и FileListBox, чтобы содержимое списка файлов соответствовало выбранной папке

Private Sub Dir1_Change()

File1.Path = Dir1.Path

End Sub

‘контструирование полного пути из имени файла и пути к папке, где он размещен

Private Sub File1_Click()

a = File1.Path + " \" + File1.FileName

End Sub

 

При работе с файловым списком имеется возможность выбора не только одного, но и нескольких файлов. Для этого используется свойство MultiSelect, которое может принимать следую­щие значения:

1- None (можно выделить только один файл);

2 - Simple (при каждом щелчке в группу добавляется вы­деленный файл или удаляется из нее, если он ужё был в группе);

3 - Extended (выделение файлов осуществляется так же, как и в программе Проводник - с использованием клавиш Shift и Ctrl).


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-08-31; Просмотров: 662; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.026 с.)
Главная | Случайная страница | Обратная связь