Работа с файлами и папками
Все что мы изучили в прошлой статье очень полезно, но все таки этого мало. Часто нужно скопировать файл из одной директории в другую или просто переименовать его. Вот об этом и не только об этом будет рассказано в этой статье.
Name
Для переименования можно использовать команду Name. У нее два параметра:
- Старое имя файла с полным путем к нему
- Новое имя файла с полным путем к нему
Пример:
Dim As String oldName="1.txt", newName="new.txt" Name( oldName,newName)
У нас файл находится в той же папке что и файл программы, поэтому пишем только имя с расширением. Однако если файл находится в другой папке то нужно писать и путь до него, например: C:\1.txt
И опять незадача! Команда Name не работает с русскими символами. Получается, что для русскоязычных пользователей она почти бесполезна. Но это не значит, что решения нет! Я вам могу посоветовать воспользоваться моей библиотекой Window9 . В ней все так же просто. Разница только в названии функции и конечно работать это будет только под Windows. Пример:
#INCLUDE "window9.bi" Dim As String oldName="1.txt", newName="ОДИН.txt" RenameDir( oldName,newName)
Данным способом можно переименовывать не только файлы , но и любые
папки.
Пример:
#INCLUDE "window9.bi" RenameDir("C:\33","C:\66")
Кроме того эта функция обладает еще некоторыми полезностями, но больше об
этом вы сможете узнать из файла справки библиотеки Window9. Если
заинтересовались, больше информации можно получить ЗДЕСЬ
Или
если вы устанавливали FreeBasic "из сборки" на странице Скачать,
тогда в меню->справка->window9
KILL
Для удаления файла можно воспользоваться функцией Kill. Она имеет один параметр: имя удаляемого файла. Функция возвращает 0 , если удаление произошло нормально, или код ошибки, если что-то пошло не так.
Пример:
If Kill("1.txt")<>0 Then ? "Error deleting" Sleep Endif
Функция удаляет файл, минуя корзину. Если нужно удалить файл в корзину, можете воспользоваться функцией DeleteDir из библиотеки Window9.
#INCLUDE "window9.bi" Const FOF_ALLOWUNDO=64 DeleteDir("C:\33.txt",FOF_ALLOWUNDO)
Или так можно удалять в корзину, только без потверждения:
#INCLUDE "window9.bi" Const FOF_ALLOWUNDO=64 Const FOF_NOCONFIRMATION=16 DeleteDir("C:\33.txt",FOF_ALLOWUNDO Or FOF_NOCONFIRMATION)
RmDir
С помощью функции RmDir можно удалять папку. Функция имеет один параметр: имя папки с полным путем.
Пример:
Rmdir("C:\999999")
Возвращает 0 если удаление завершено , и -1 при неудаче.
Функция удаляет папку, минуя корзину. Если нужно удалить папку в корзину, можете воспользоваться функцией DeleteDir из библиотеки Window9.
#INCLUDE "window9.bi" Const FOF_ALLOWUNDO=64 DeleteDir("C:\33",FOF_ALLOWUNDO)
MkDir
С помощью функции MkDir можно реализовать создание папки в имеющемся каталоге. Функция имеет один параметр: имя нового каталога с полным путем.
Пример:
Mkdir("C:\999999")
Возвращает 0 при удачном создании и -1 при неудаче.
CurDir
Получить текущий используемый каталог(папку) можно с помощью функции CurDir.
Пример:
? Curdir Sleep
ChDir
Изменить текущий используемый каталог(папку) можно с помощью функции ChDir.
Пример:
Chdir("C:/") ' устанавливаем текущий каталог Mkdir("999999") ' создаем в нем папку Rmdir("999999") ' удаляем эту папку
Запуск файлов
Для запуска файлов есть несколько возможных вариантов.
Exec - передача управления внешней программе с параметрами. Ваша программа будет остановлена для ожидания завершения запущенной внешней программы. Как только внешняя программа завершится, функция Exec получит код завершения. Если внешнюю программу запустить не удалось, тогда функция вернет -1.
У функции 2 параметра:
- Имя программы с полным путем к ней
- Список параметров через пробел
Пример:
? Exec("C:\Windows\System32\notepad.exe","1.txt") Sleep
Chain - передача управления внешней программе без параметров. Ваша
программа будет остановлена для ожидания завершения запущенной внешней
программы. Как только внешняя программа завершится, функция Chain получит код
завершения. Если внешнюю программу запустить не удалось, тогда функция вернет
-1. У функции 1 параметр: имя программы с полным путем к ней
Пример:
? Chain("C:\Windows\System32\notepad.exe") Sleep
Run - полная передача управления внешней программе с параметрами. При
использовании этой функции, ваша программа завершается. Если внешнюю программу
запустить не удалось, тогда функция вернет -1 и не завершит вашу программу.
У функции 2 параметра:
- Имя программы с полным путем к ней
- Список параметров через пробел
Пример:
? Run("C:\Windows\System32\notepad.exe","1.txt") Sleep
Во всех этих функциях не хватает как минимум одной возможности:
"Чтобы и волки были сыты и овцы целы".
Вы наверно догадались уже. К примеру нам нужно запустить другую программу, но не завершать свою и не останавливать. Я вам могу посоветовать либо функцию RunProgram из библиотеки Window9 , либо использовать напрямую API функцию ShellExecute.
Пример использования RunProgram:
#INCLUDE "window9.bi" RunProgram("notepad.exe") Print "All" Sleep
На самом деле функция RunProgram это просто более удобная обертка для
ShellExecute, которая в свою очередь является очень мощной и многофункциональной
функцией. RunProgram ни в чем не уступает в функциональности, напротив в ней
добавлены необязательные параметры. Так например в примере выше мы использовали
функцию с одним параметром, но у RunProgram их 5. Это позволяет решать
разнообразные задачи, связанные с запуском файлов. Более того у библиотеки есть
другие, более расширенные возможности запуска файлов, но об этом более подродно
в справке window9 в главе Process.
Для запуска файлов и не только, можно программно использовать интерпретатор командной строки Windows или Linux с помощью функции Shell, имеющий всего один параметр: нужная команда с параметрами
Пример_1:
Shell("C:\Windows\System32\notepad.exe 1.txt") Sleep
Пример_2:
Shell "dir > Katalogs.txt" Shell "C:\Windows\System32\notepad.exe Katalogs.txt" Print "All!!" Sleep
С первым примером надеюсь все понятно. Во втором примере попросту вывели
содержимое текущего каталога в файл Katalogs.txt и после запустили данный
файл в блокноте.
ExePath
Для того чтобы получить каталог вашей запущенной программы, можно
использовать функцию ExePath
? Exepath Sleep
Dir
Для того, чтобы вывести список файлов в текущем каталоге, можно воспользоваться функцией Dir. Функция имеет три параметра:
- маска файлов для вывода (пример: "*" или "*.txt*")
- атрибут файла для вывода
- 1 - только для чтения
- 2 - скрытый
- 4 - системный
- 16 - директория(папка)
- 32 - архивный
- 33 - нормальный (по умолчанию)
- буфер типа Integer, куда возвращается текущий атрибут файла
Эта функция перегруженная. Принцип ее таков:
Вначале она вызывается как минимум с маской файлов для получения первого файла в каталоге. Далее ее вызов идет уже в цикле, где можно ее вызывать с одним параметром или вообще без параметров.
Пример_1 (вывод файлов и папок каталога):
Dim d As String = Dir("*",16 Or 32) Do ? d d= Dir() Loop Until d="" Sleep
Пример_2 (вывод только файлов):
Dim d As String = Dir("*",32) Do ? d d= Dir() Loop Until d="" Sleep
Пример_3 (вывод только папок):
Dim d As String = Dir("*",16) Do ? d d= Dir() Loop Until d="" Sleep
Пример_4 (вывод всего, включая . и .. с получением атрибутов):
Dim At As Integer Dim d As String = Dir("*",55,@At) Do ? d,At d= Dir(@At) Loop Until d="" Sleep
Далее идут не встроенные средства, а функции дополнительных библиотек:
FileCopy
Для копирования файлов можно применить функцию FileCopy, имеющую два параметра:
-
строка имени файла, исходного копируемого файла
-
строка имени файла, конечного получаемого файла
#INCLUDE "file.bi" Filecopy "source.txt", "dest.txt"
FileExists
Проверка на существование файла.
Пример:
#INCLUDE "file.bi" If FileExists("33.txt") Then Print "file found" ' файл существует Endif Sleep
FileLen
Данной функцией можно узнать длину файла на диске. В отличии от функции LOF , для этой функции не надо открывать предварительно файл с помощью функции OPEN.
#INCLUDE "file.bi" ? Filelen("33.txt") Sleep
MoveDir
Функция перемещает папки или файл(ы).
Пример_1 (перемещает только файлы из каталога C:\33\ в каталог C:\66):
#INCLUDE "window9.bi" MoveDir("C:\33\*.*","C:\66") Sleep
Пример_2(перемещает папку C:\33 в каталог C:\66):
#INCLUDE "window9.bi" MoveDir("C:\33","C:\66") Sleep
Пример_3(перемещает файл 7.txt из C:\33 в каталог C:\66):
#INCLUDE "window9.bi" MoveDir("C:\33\7.txt","C:\66") Sleep
И как бы в дополнение:
Command
Функция получающая параметры, передаваемые в командной строке при запуске программы. Функция имеет один необязательный параметр (индекс).
index - управляет возвращаемым значением.
Если index не используется, то возвращает одну единую строку параметров как один параметр.
Пример:
"1.exe 1 2 3 4" при Command() вернет: 1 2 3 4
Если index равен 0, то вернет родительское имя файла без параметров
Пример:
"1.exe 1 2 3 4" при Command(0) вернет: 1.exe
Если индекс больше нуля, то возвращает имеющийся параметр под своим индексом.
Пример:
"1.exe 1 2 3 4" при Command(3) вернет: 3
Если индекс имеет значение, а параметра под таким индексом нет, ничего не возвратит.
Пример:
"1.exe 1 2 3 4" при Command(5) ничего не вернет
System и End
Функция System завершает работу программы и закрывает все открытые программой файлы. Функция не имеет параметров. Функция End при завершении может передавать код завершения, в своем единственном параметре, который принимают функции Exec и Chain , рассмотренные выше.
Environ
Возвращает значение переменной окружения системы.
Пример (получает все глобально-видимые папки в системе):
? Environ("path") Sleep
SetEnviron
Устанавливает значение переменной окружения системы. Пример (есть в справке к FreeBasic) сам писать не буду, чтобы кто-то из вас бездумно не наделал ошибок. Если все таки решите запускать пример из справки, советую сначала скопировать содержимое той переменной, которую хотите поменять.
В приципе это все, что вам понадобится на первых порах, но кроме встроенных средств, вы всегда можете использовать средства различных библиотек. В частности в библиотеке window9 еще немало найдете полезного. Всего доброго!
содержание | назад | вперед