Язык WordBasic - практический подход

Работа с каталогами


 
WordBasic поддерживает все стандартные операции навигации по дереву каталогов диска и работы с файлами.
Ниже перечислены основные операции.
Смена каталога по умолчанию:
ChDir path$
делает текущими диск и каталог, заданные аргументом path$.
MkDir name$
создает каталог с именем, заданным аргументом name$.
RmDir name$
удаляет заданный каталог. Удалить текущий каталог нельзя.
 
Kill имя_файла$
удаляет заданный файл. Чтобы избежать непредвиденного результата, рекомендуется задавать полное имя файла. Обычная последовательность удаления файла:


имя_документа$=FileName$(0)
DocClose 2
Kill имя_документа$
 
Name прежнее_имя$
As новое_имя$
переименовывает файл.
FileOpen [.Name=имя]
загружает документ для редактирования.
FileClose [режим]
закрывает редактируемый документ.
CountDirectories()
возвращает число подкаталогов в текущем каталоге.
GetDirectory$()
возвращает имя подкаталога по его заданному порядковому номеру.
 
Типичная задача создать массив имён подкаталогов текущего каталога.
 
DirNum = CountDirectories()
Dim sdir$(DirNum)
sdir$(0) = "[..]"
For i = 1 To DirNum
      sdir$(i) = LCase$(GetDirectory$(i))
Next
 
Но самая нужная в практической работе функция называется Files$. Она, по существу, выполняет четыре функции:
1. возвращает имя текущего каталога, если в качестве аргумента задана точка:
      curcat$=Files$(".");
 
2. определяет, существует ли указанный вами файл. Например:
if Files$("m20941.msg") <> "" then FileNotExist=-1;
 
3. позволяет задавать обобщенное имя файла (т. е. использовать в имени файла символы "?" и "*") и возвращает имя файла, которое удовлетворяет заданному шаблону поиска;
4. и наконец, позволяет организовать цикл, чтобы найти все имена файлов, удовлетворяющих данному шаблону.
 
Вот задача, где без функции Files() трудно обойтись. По электронной почте MCI к нам в виде текстовых файлов приходило много писем со статьями.
К сожалению каждому из них предшествовал заголовок длинной 1,5 Кбайт, где отмечался весь неблизкий путь этого письма из Бостона. Следующая макрокоманда уберет заголовки у всех "писем".
Для этого сначала сделает каталог с письмами текущим:
 
pth$= "C:\ED\MCI"
If Files$(".") <> pth$ Then ChDir pth$"
Следующий оператор возвращает имя первого файла в текущем каталоге, имеющего расширение .msg:
a$ = Files$("*.msg")
чтобы найти следующее имя, функция Files$() задаётся без аргумента.
если файл существует, то откроем его для последующих операций с его содержимым, если не существует, выведем сообщение и завершим работу.
If Files$(a$) <> "" Then FileOpen a$
Else
      MsgBox "Файл в текущем каталоге не найден."
End If
 
Пример.
 
Занести в массив имена всех файлов в каталоге. Для этого сначала найдем их число.
 
tmp$ = Files$("*.*")
count = - 1
While temp$ <> ""
      count = count + 1
      tmp$ = Files$()
Wend
If count > -1 Then
      Dim list$(count)
      list$(0) = Files$("*.*")
      For i = 1 To count
                  list$(i) = Files$()
      Next i
Else
      MsgBox "Текущий каталог пуст."
End If
 
Пример.
Загрузить два файла и расположить их на экране рядом друг с другом в вертикальных окнах.
 
Sub MAIN
a$ = "C:\EDWARD\MYBASE"
If Files$(".") <> a$ Then ChDir(a$)
FileOpen .Name = am_a_z.doc
FileOpen .Name = firms1.doc
If DocMaximize() Or DocMinimize() Then DocRestore
If CountWindows() = 2 Then
      DocMove 0, 0
      DocWindowWidth 240
      NextWindow
      If DocMinimize() Then DocRestore
      DocMove 240, 0
      DocWindowWidth 240
End If
End Sub
 
Несколько в стороне находится функция DefaultDir$() и оператор ChDefaultDir. Они позволяют из макрокоманды переопределить или проверить установку каталогов по умолчанию.
 
Например:


 
If DefaultDir$(6) = "" Then
ChDefaultDir "C:\TOOLS", 6
End If
 
Оператор Connect служит для установления соединения с сетевым диском. Формат:
Connect [.Drive = номер,] .Path = текст1 [, .Password = пароль
где:
.Drive – номер соответствует букве, которую вы хотите присвоить сетевому диску. При этом 0 (по умолчанию) соответствует первой доступной букве для имени дисковода, 1 – следующей и т. д.;
.Path – путь для каталога сетевого диска, например "\\AVTOR\IVANOV";
.Password пароль, если сетевой диск защищён паролём.
 
Оператор SetAttr устанавливает атрибуты файла для файла, имя которого задано аргументом. Устанавливаемые им атрибуты не удаляют атрибуты, установленные этому файлу ранее.
Синтаксис:
 
SetAttr ИмяФайла$, атрибут
Где аргумент атрибут принимает одно из следующих значений (или их произвольную сумму):
0 – снять все атрибуты
1 – только для чтения
2 – скрытый
4 – системный
32 – архивный
 
Пример.
 
Sub MAIN
 SetAttr "C:\WPRESSA.DOC", 0  'снять все атрибуты
 SetAttr "C:\WPRESSA.DOC", 33 'добавить атрибуты "только для чтения" и "архивный
(32+1)"
End Sub
 
Для того, чтобы определить какие атрибуты у файла, используется функция GetAttr(имя_файла). Например,
 
attr = GetAttr
"C:\WPRESSA.DOC"
if attr mod 2 =1 then MsgBox "Только для чтения"
 
Оператор Name позволяет переименовать файл.
Его формат: Name СтароеИмя$ As НовоеИмя$.

Содержание раздела