Работа с файлами и папками

Все что мы изучили в прошлой статье очень полезно, но все таки этого мало. Часто нужно скопировать файл из одной директории в другую или просто переименовать его. Вот об этом и не только об этом будет рассказано в этой статье.

 

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 еще немало найдете полезного. Всего доброго!

содержание | назад | вперед