Для работы с деревом файлов используйте элементы управления DriveListBox, DirListBox и FileListBox панели элементов управления (рис. 3.1).
(рис 3.1) DriveListBox, DirListBox и FileListBox
Имеется возможность после старта проекта выбрать требуемый объект, например файл каталога некоторого дискового устройства для дальнейшей работы с ним. Рассмотрим кратко некоторые параметры этих элементов управления:
Change,Path доступно только во время выполнения, его можно задать и возвратить. Свойства Hidden, Normal, ReadOnly, System, Archive дают возможность вывести в список только требуемые файлы. Имеется около 20 событий. Часто в процедуре CommandК_Click () выполняются действия, связанные со значениями Path и FileName списка файлов.Чтобы обеспечить совместное функционирование элементов управления DriveListBox, DirListBox и FileListBox после размещения их на форме, нужно создать синхронизирующие их работу процедуры:
Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub Private Sub Dir1_Change() File1.Path = Dir1.Path End Sub Для вывода содержимого каталога после его маркировки и нажатия клавиши Ввод нужно ввести код: Private Sub Dir1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Dir1.Path = Dir1.List(Dir1.ListIndex) End Sub
Здесь свойство ListIndex характеризует маркированную пользователем строку, см. ниже.
В распоряжение пользователя предоставлен ряд функций, некоторые из них приведены ниже.
Информация об атрибутах дана в табл. 3.1
| Значение атрибута | Имя константы | Пояснение |
| 0 | vbNormal | Свободный доступ |
| 1 | vbReadOnly | Только для чтения |
| 2 | vbHidden | Скрытый |
| 4 | vbSystem | Системный |
| 8 | vbVolume | Дисковое устройство |
| 16 | vbDirectory | Каталог |
| 32 | vbArchive | Архив |
Для приобретения навыков работы с файловой системой выполнить следующее:
' синхронизация работы элементов управления и ' обеспечение вывода содержимого каталогов при ' нажатии клавиши Enter Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub Private Sub Dir1_Change() File1.Path = Dir1.Path End Sub Private Sub Dir1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Dir1.Path = Dir1.List(Dir1.ListIndex) End Sub Private Sub Command1_Click() ' вывод пути и имени файла Label1 = Drive1: Label2 = Dir1: Label3 = File1 End Sub ' процедура многократного копирования файла ' последовательным нажатием командной кнопки Private Sub Command3_Click() Static i As Integer FileCopy "A:\Net14.ICO", "A:\FileN" ' вывод имени копируемого файла и числа копирований Label4 = File1 " Copy " i +1 i = i + 1 End Sub ' процедура копирования файла путём маркировки файла в ' списке FileListBox и последующего старта ' соответствующей процедуры Private Sub Command4_Click() Static i As Integer Print File1: FileCopy File1, "FileN": Label5 = File1 " Copy " i + 1 i = i + 1 End Sub ' создание каталогов Private Sub Command2_Click() MkDir а1: MkDir а2 End Sub
Пользователь имеет возможность использовать объекты файловой системы с их свойствами, методами и событиями; т.о. обеспечивается возможность работы с файлами, папками, дисковыми устройствами. Соответствующий список дан в табл. 3.2.
| Имя | Назначение |
| FileSystemОbject | Обеспечение доступа к другим объектам и вывода информации о файловой системе. Создаваемый объект описывается с использованием ключевого слова New: Dim fileSys As New FileSystemObject |
| TextStream | Создание и чтение потоков данных |
| Drive | Доступ к дисковым устройствам |
| Folder | Работа с папками |
| File | Работа с файлами |
Для использования объектов нужно подключить DLL, содержащую эти объекты. Функции DLL представляют собой откомпилированный код (примером являются диалоговые окна Открыть/Сохранить, выводимые при открытии/сохранении объектов; эти окна вызываются из DLL, поэтому ими можно пользоваться в любой программе). Для подключения нужно выполнить следующее: меню Разработать > Ccылки > сделать щелчок на флажке Microsoft Scripting Runtime (SCRUN.DLL).
Проводится работа с объектом TextStream:
CreateTextFile () объекта FileSystemObject,Write объекта TextStream,Read объекта TextStream.Работа выполняется с использованием объекта CommonDialog, его функции, используемые в данном случае, описаны под комментариями в коде, данном ниже. Объект CommonDialog нужно включить в коллекцию инструментов: меню Проект > Компоненты > Управления > Microsoft CommonDialog Control, затем cледует поместить его на форму и присвоить значение свойству Name (здесь - cdlgStudy ).
Для создания возможности использования объектов файловой системы нужно подключить библиотеку DLL, содержащую эти объекты: меню Разработать > Ccылки > Microsoft Scriptlet Component (сделать щелчок на соответствующем элементе управления CheckBox).
Последовательность действий:
CommonDialog, см. выше,Option Explicit ' описание объекта fileSys Dim fileSys As New FileSystemObject Dim stream As TextStream 'описание объекта поток данных Dim str1 As String, 'описание строки данных Dim fileName As String 'описание имени создаваемого файла ' ввод имени файла, создание потока данных, ' закрыть объект Private Sub Command1_Click() ' для открытия стандартного диалогового окна ' использовать метод ShowOpen объекта CommonDialog cdlgStudy.ShowOpen fileName = cdlgStudy.FileName ' задать имя файла ' создать поток данных с заданным именем Set stream = fileSys.CreateTextFile(fileName, True) ' строковые данные получить вводом в текстовое поле str1 = txtInput.Text ' запись данных: использовать метод Write объекта stream stream.Write (str1) ' использовать метод Close для того, чтобы закрыть объект stream.Close End Sub Private Sub Command2_Click() ' чтение потока данных ' использовать метод ShowOpen объекта CommonDialog cdlgStudy.ShowOpen fileName = cdlgStudy.FileName ' определить имя файла ' открыть поток данных Set stream = fileSys.OpenTextFile(fileName) ' чтение: выполнять конкатенацию до тех пор, пока не ' появится признак конца файла Do While stream.AtEndOfStream <> True str1 = str1 stream.Read(1) Loop stream.Close ' закрыть поток данных txtOutput.Text = str1 ' вывести данные в текстовое поле End Sub
Запись/чтение данных из приложения в файл проводится через коммуникационные каналы ввода/вывода. При открытии файлов им ставятся в соответствие каналы, имеющие номера. Есть ограничения на число открытых файлов. Функция FreeFile () возвращает номера свободных каналов (их можно использовать для открытия файлов).
Рассматриваются следующие
При последовательном доступе записи считываются последовательно одна за другой; доступ применяется в основном при работе с текстовыми файлами. Сначала используется инструкция Open - открыть файл, синтаксис:
Open путь_имя_файла For Input |Output | Append [Share] As [#]номер_файла
As [#]номер_файла - присваиваемый номер; открытый файл после работы с ним должен быть закрыт и тот же самый номер может быть использован снова.Инструкция Close [[#]номер_файла, [#]номер_файла :] используется для закрытия файла. Для записи/чтения используются инструкции Write/Input:
Input не позволяет считывать данные в элемент управления. В качестве переменных можно использовать элементы массива. Для записи может использоваться также инструкция:
Print #1, "A Happy New Millennium !!!", " : ".
Этот вид доступа предполагает, что файл имеет постоянную структуру. В начале работы используется инструкция Open:
Open имя_файла For Random [Access - дост][Lock] As [#]ном_файла [Len = длина записи]
Open "file1.dat" For
Инструкция Close [[[#]номер_файла][, [#]номер_файла] :] используется для закрытия файла.
Для записи/чтения используются инструкции Put/Get:
Put [#]номер_файла, [номер записи] имя_переменной
Get [#]номер_файла, [номер записи] имя_переменной
Двоичный доступ в отличие от произвольного возможен не к определeнному набору данных, а к отдельному байту.
Приводятся примеры работы с файлами, пояснения даны под комментариями к коду. Создать требуемые элементы управления, ввести код, данный ниже, см. также рис. 3.3 (схема формы) и рис. 3.4
(рис 3.3) Схема формы
Задание: создать несколько переменных типа String, вывести их значения в поле списка и значения записать в файл.
Dim a1 As String, a2 As String, a3 As String, a4 As String Dim a5 As String, a6 As String, d1 As Integer Dim j As Integer, mass(6) As String, nomZ As Integer Dim b1 As String, b2 As String, b3 As String, b4 As String Private Sub Form_Load() ' присвоить значения переменным и вывести в поле List1 a1 = "a": a2 = "b": a3 = "c": a4 = "d" List1.List(0) = a1: List1.List(1) = a2 List1.List(2) = a3: List1.List(3) = a4 End Sub Private Sub Command1_Click() ' запись в файл ' открыть файл для записи; файл можно просмотреть в ' приложении "Блокнот" Open "file11.txt" For Output As #1 Write #1, "Name", a1, a2, a3, a4 ' запись в файл Close #1 ' закрыть файл End Sub Private Sub Command2_Click() ' запись в файл Open "file22.txt" For Output As #1 ' запись в файл строки и данных из поля списка в 4 ' строки (записи) Write #1, "Name" For j = 0 To 3 Write #1, List1.List(j) Next j Close #1 End Sub
(рис 3.4) Работа с файлами
Private Sub Command3_Click() ' открыть файл, созданный ранее, для чтения Open "file11.txt" For Input As #1 Input #1, b1, b2, b3, b4 ' чтение данных в переменные b1 - b4 Close #1 Label1 = b1 " " ' вывод результата в поле метки Label1 = Label1 b2 " ": Label1 = Label1 b3 " " Label1 = Label1 b4 " " End Sub ' очистка поля метки щелчоком на поле метки Private Sub Label1_Click() Label1 = "" End Sub Private Sub Command4_Click() Open "file22.txt" For Input As #1 ' открыть файл для чтения ' считывать данные, пока не появится признак конца файла j = 0 Do While Not EOF(1) Input #1, b1 List2.List(j) = b1 ' вывести в поле списка j = j + 1 Loop Close #1 End Sub
' При загрузке формы выводится сообщение "Сделать ' двойной щелчок на форме", после чего поля List3 и ' List4 заполняются данными (cм. процедуру Form_DblClick()) Private Sub Form_Load() ' сделать двойной щелчок на форме Label3.BackColor = RGB(230, 0, 0) Label3 = "Make DblClick on the form !!" End Sub Private Sub Form_DblClick() For j = 0 To 11 ' заполнить поля нулями, чтобы иметь доступ ' к любой из строк List4.List(j) = 0 List5.List(j) = j ' заполнить поля номерами строк Next j End Sub Private Sub Command5_Click() ' запись в файл Open "file33.txt" For Random As #1 For j = 0 To 11 ' выбор номера записи случайным образом nomZ = Int(Rnd * 10 + 1) ' записать в файл под номером записи nomZ данные, ' хранящиеся в переменной j Put #1, nomZ, j List4.List(nomZ - 1) = nomZ " " j ' вывести результат Next j Close #1 End Sub Private Sub Command6_Click() ' чтение из файла Open "file33.txt" For Random As #1 ' открыть тот же файл For j = 0 To 11 ' выбор номера записи, которую нужно считать nomZ = Int(Rnd * 10 + 1) ' считать из номера записи nomZ в переменную d1 Get #1, nomZ, d1 List5.List(j) = d1 ' вывести в поле списка Next j Close #1 End Sub
Записать данные типа String в файл по 3 элемента в строку, считать данные из файла в массив группами по 2 элемента.
Private Sub Form_Load() ' объявление: "Ввести данные !!" Label2.BackColor = RGB(200, 0, 0) Label2 = "Input !!" End Sub ' введенные в диалоговом режиме в 6 текстовых полей ' данные, присвоить значениям переменных а1 - а6 Private Sub Text1_Change() a1 = Text1 End Sub Private Sub Text2_Change() a2 = Text2 End Sub Private Sub Text3_Change() a3 = Text3 End Sub Private Sub Text4_Change() a4 = Text4 End Sub Private Sub Text5_Change() a5 = Text5 End Sub Private Sub Text6_Change() a6 = Text6 End Sub Private Sub Command7_Click() ' запись в файл по 3 элемента в строку Open "file44.txt" For Output As #1 Write #1, a1, a2, a3 Write #1, a4, a5, a6 Close #1 End Sub Private Sub Command8_Click() ' считать из файла по 2 элемента в массив и ' вывести на экран Open "file44.txt" For Input As #1 j = 0 Do While Not EOF(1) Input #1, a1, a2 mass(j) = a1: mass(j + 1) = a2 List3.List(j) = mass(j): List3.List(j + 1) = mass(j + 1) j = j + 2 Loop Close #1 End Sub
String, создать 3-й массив m3(2), элементы которого получаются попарным склеиванием данных типа String, вводимых в текстовые поля,Like ) операнда, вводимого в текстовое поле с шаблоном - элементами массива m3(2),Timer1_Timer () после создания 4-ого массива mf(2),Последовательность действий:
m1(2), m2(2) и процедуру Form_Load (),Command1_Click(),Command3_Click(),Timer1_Timer (),Command1_Click() и Command2_Click() второй формы) и 2 Form_Click () первой формы.
(рис 3.5) Схема формы
Form1
(General) (Declarations)
Dim j As Integer
' описание переменных для хранения значений операнда и
' шаблона
Dim op1 As String, sch As String
Dim res As Boolean ' переменная для работы с оператором Like
Dim m1(2) As String, m2(2) As String, m3(2) As String
Dim a As Integer, b As Integer
' описание вспомогательного массива и переменных,
' используемых для старта процедуры Timer1_Timer()
Dim mf(2) As Integer
Dim ffa As String, ffb As Integer
Private Sub Form_Load() ' создание массивов и вывод его элементов
For j = 0 To 1
a = Int(Rnd * 10 + 60): m1(j) = Chr(a): List1.List(j) = m1(j)
b = Int(Rnd * 10 + 70): m2(j) = Chr(b): List2.List(j) = m2(j)
Next j
End Sub
Private Sub Command1_Click()
' создание 3-его массива в диалоговом режиме
For j = 0 To 1
m3(j) = Text1(j).Text Text2(j).Text: List3.List(j) = m3(j)
Next j
' создание массива, обеспечивающего старт процедуры
' Timer1_Timer()
For j = 0 To 1
ffa = m3(j): ffb = Asc("ffa"): mf(j) = ffb
Next j
End Sub
' работа оператора Like и вывод результатов
Private Sub Command2_Click()
op1 = Text3.Text ' ввод операнда
For j = 0 To 1
sch = m3(j): res = op1 Like sch
If res Then Label1.Caption = "ДА": GoTo 300
Next j
Label1.Caption = "НЕТ"
300 End Sub
Private Sub Command3_Click() ' запись в файл
Open "ff.txt" For Output As #1
Write #1, m1(0), m1(1), m2(0)
Write #1, m2(1), m3(0), m3(1)
Close #1
End Sub
' процедура, обеспечивающая перемещение поля метки после
' создания массива
Private Sub Timer1_Timer()
Label2.Left = Int(200 * Rnd * mf(0))
Label2.Top = Int(150 * Rnd * mf(1))
End Sub
Private Sub Form_Click()
Unload Me
Form2.Show
End Sub
Form2
General Declarations Dim m4(6) As String, j As Integer, i As Integer Dim k1 As String, k2 As String, k3 As String Private Sub Command1_Click() ' чтение из файла по 3 элемента Open "ff.txt" For Input As #1 j = 0 Do While Not EOF(1) Input #1, k1, k2, k3 m4(j) = k1: m4(j + 1) = k2: m4(j + 2) = k3 j = j + 3 Loop Close #1 End Sub Private Sub Command2_Click() ' вывод в массив ListBox For i = 0 To 2 For j = 0 To 1 List1(i).List(j) = m4(2 * i + j) Next j, i End Sub
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.