Закрытие файлов
Все открытые файлы по окончании работы с ними необходимо закрыть!
Синтаксис оператора закрытия файлов::
Close [FileNamberList]
FileNamberList– список закрываемых файлов, представленных номерами файлов и перечисляемых через запятую.
Если список файлов опущен, то закрываются все открытые файлы.
Работа с файлами последовательного доступа
Файлы последовательного доступа – это, как правило, текстовые файлы, т.е. последовательности ASCII-символов, организованные в строки.
При открытии таких файлов возможны три режима доступа:
Input –открыт для последовательного чтения данных;
Output– открыть файл для последовательной записи данных, при этом информация записывается всегда с начала файла (предыдущая затирается, если в файле уже что-то записано);
Append– открыть файл для добавления данных к уже имеющимся в файле (записи добавляются в конец файла).
Чтение данных
Если файл открывается для чтения, то он должен существовать, иначе возникнет ошибка!
Чтение данных из файла последовательного доступа выполняется с помощью функции Inputи операторовInput# иLineInput#.
Функция Inputсчитывает из файла заданное количество символов и обычно используется для чтения данных, записанных в файл операторомPrint#.
Синтаксис
Input(number, #filenumber),
где
number- целое число, которое задает количество считываемых из файла символов;
filenumber- номер файла.
При использовании этой функции следует иметь в виду, что необходимо знать количество считываемых символов. Поэтому предварительно необходимо вычислить длину считываемого файла с помощью функции Fileline.
Оператор Input #используется, когда необходимо прочитать данные, имеющие структуру с разделителями (в качестве разделителей - запятые). Такие файлы получаются при использовании оператора записиWrite#.
Синтаксис
Input #filenumber, varlist,
где, filenumber- номер файла,
varlist - список переменных.
При работе этого оператора сначала считывается целая строка, а затем подстроки, отделенные разделителями (запятыми), помещаются в соответствующие переменные списка.
Для чтения всего содержимого файла необходимо организовать циклическое считывание данных из файла, поскольку в переменные данные считываются этим оператором по строкам.
Оператор Line Input #используется для построчного чтения данных из последовательного файла, обычно записанного операторомPrint#.
Синтаксис:
Line Input #filenumber, varname,
где
filenumber - номер файла,
varname - имя переменной.
Оператор посимвольно считывает всю строку данных из файла и помещает ее в строковую переменную. При этом разделителем строк в файле служит стандартный разделитель строк символ возврата каретки CHR(13) или последовательность символов возврата каретки и перевода строкиCHR(13)+CHR(10), причем в переменнуюvarnameэти разделители не вставляются.
Для того, чтобы прочитать все данные из файла при помощи этого оператора, необходимо организовать цикл чтения данных из файла.
Запись данных
Данные в файл последовательного доступа записываются с помощью операторов
Print # и Write #.
Оператор Write# дополнительно автоматически вставляет в файл разделители.
Замечание.
Каждая из функций записи работает в паре с определенной функцией чтения. Для оператора Print# это функцияInputили операторLineInput#, а для оператораWrite# – это операторInput#.
Синтаксис:
Print #filenumber, [outputlist]
Write #filenumber, [outputlist]
где filenumber– номер файла,
outputlist– список выражений или переменных для записи.
При выполнении записи данных в файл оператор и Write# автоматически вставляет символ перевода кареткиCHR(13) и символ новой строкиCHR(10).
Замечание. Write# иInput# лучше применять для файлов бинарных и прямого доступа.
Переход на заданную позицию в файле
Переход на заданную позицию в файле можно организовать с помощью оператора Seek.
Синтаксис
Seek #filenumber, position
где filenumber – номер файла,
position – целочисленное выражение, задающее позицию указателя в файле. Позиционирование при этом выполняется посимвольно.
Оператор Seekустанавливает указатель на требуемую позицию. Если после этого использовать функции чтения или записи, то действие этих функций будет выполняться, начиная с позиции указателя, найденного операторомSeek.
Примеры операторов работы с файлами
Пример 1. Запись файла с помощью оператораPrint#
Dim pathfile As String Private Sub Command1_Click() pathfile = "C:\WINDOWS\Рабочий стол\primer\primer.txt" ‘имя файла Open pathfile For Output As #1 ‘открытие файла на запись Print #1, " Проверка работы с файлами VB " ‘запись в файл For i = 1 To 3 Print #1, i ‘запись в файл Next Close #1 End Sub
Запись идет по строкам, если в Print использовать «;» запишется одна строка. Каждый раз при выполнении программы файл будет перезаписываться заново. Если необходимо добавлятьзаписи в файл, нужно открыть его на дозапись Open pathfile For Append As #1 При выполнении программы новые строки будут записываться в конец файла. |
Пример 2. Чтение файла с помощью функцииInput
Private Sub Command2_Click() Open pathfile For Input As #1 ‘открытие файла на чтение len_str=FileLen(pathfile) ‘определение числа символов в файле strfile=Input(len_str, #1) ‘считывание всех символов файла в строку Text2.Text = strfile ‘вывод строки в TextBox Close #1 End Sub |
Пример 3. Чтение файла с помощью оператораLine Input #
Private Sub Command2_Click() Open pathfile For Input As #1 ‘открытие файла на чтение DoWhileNotEOF(1) ‘организация цикла на чтение файла до конца LineInput#1,strfile‘построчное чтение записей из файла в переменную Text2.Text=Text2.Text+strfile+Chr(13) +Chr(10) ‘формирование очередной строкиTextBox Loop Close #1 End Sub |
|
TextBox имеет свойство MultiLine =True |
Пример 4. Запись файла с помощью оператораWrite #
Dim pathfile As String Private Sub Command1_Click() pathfile = "C:\WINDOWS\Рабочий стол\primer\primer.txt" 'имя файла Open pathfile For Output As #1 'открытие файла на запись Write #1, "Проверка работы с файлами" 'запись в файл For i = 1 To 3 Write #1, "Строка", i 'запись в файл Next Close #1 End Sub |
Пример 5. Чтение файла с помощью оператораInput #
Private Sub Command2_Click() Open pathfile For Input As #1 Do While Not EOF(1) Input #1, strfile Picture1.Print strfile Loop Close #1 End Sub |