Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие 800564

.pdf
Скачиваний:
3
Добавлен:
01.05.2022
Размер:
5.57 Mб
Скачать

ЛАБОРАТОРНАЯ РАБОТА № 9. СИСТЕМА УПРАВЛЕНИЯ ФАЙЛАМИ. ФУНКЦИИ API ДЛЯ РАБОТЫ С ПАПКАМИ И ФАЙЛАМИ

Цель работы: получить представление о реализации функций системы управления файлами.

Для выполнения лабораторной работы требуется написать программы, позволяющие выполнять операции с папками и файлами с использованием функций API.

Краткие теоретические сведения

Файл - это именованная совокупность данных, хранящаяся на каком-либо носителе информации.

Единственным способом работы с файлами является использование СУФ или файловой системы (ФС).

Каталоги

Это системные файлы, обеспечивающие поддержку структуры ФС.

Они содержат системную справочную информацию о наборе файлов, сгруппированных пользователем по какомулибо неформальному признаку (договоры, рефераты, курсовые проекты и т. п.).

Каталоги устанавливают соответствие между именами файлов и их характеристиками (тип файла, права доступа к файлу, его расположение на диске, размер, дата и время создания и др).

Специальные файлы

Это фиктивные файлы, ассоциированные с устройствами ввода-вывода, которые используются для унификации механизма доступа к последовательным устройствам ввода-вывода,

181

таким как терминалы, принтеры и др. (например MS-DOS рассматривает монитор и клавиатуру как файлы со стандартным именем con – консоль, а принтер – как файл prn)

Именованные контейнеры (каналы)

Это циклические буферы, позволяющие выходной файл одной программы соединить со входным файлом другой программы.

Отображаемые файлы

способ работы с файлами, при котором всему файлу или некоторой непрерывной части этого файла ставится в соответствие определённый участок ОП.

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

Наиболее важной характеристикой любого механизма абстракции является именование управляемых объектов.

Во многих ОС имя файла состоит из двух частей, разделенных точкой.

Имя файла до “.” и часть имени после “.”, обычно означающее его тип (рис. 76).

Рис. 76. Представление файла в СУФ некоторых ОС

182

Типы имен файлов

1.Простые, т.е. символьное имя идентифицирует файл

впределах одного каталога.

2.Составные, т.е. символьное имя представляет собой цепочку, содержащую имя и имена всех каталогов, через которые проходит путь от корневого каталога до данного файла.

3.Относительные, т.е. символьное имя определяется через текущий каталог, т. е. каталог, с которым в данный момент времени работает пользователь.

Файловый каталог - связующее звено между СУФ и набором файлов.

Каталог содержит информацию о файлах:

атрибуты,

местоположение,

принадлежность.

Пользователи обращаются к файлам по символьным именам.

Каталоговые системы имеют иерархическую структуру. Каталоги образуют (рис. 77):

дерево, если файлу разрешено входить только в один каталог;

сеть, ли файл может входить в несколько каталогов.

183

MS DOS

UNIX

Windows

Linux

Рис. 77. Пример каталогов для различных ОС

Древовидная структура

На каждом из устройств размещается автономная ФС. (т. е. файлы, находящиеся на этом устройстве, описы-

ваются деревом каталогов, никак не связанным с деревьями каталогов на других устройствах).

Для однозначной идентификации файла пользователь должен указывать идентификатор логического устройства.

Сетевая структура

Организация хранения файлов, при которой пользователю предоставляется возможность объединить ФС, находящиеся на разных устройствах, в единую ФС, описываемую еди-

ным деревом каталогов.

Такая операция называется монтированием. Пример монтирования ФС (рис. 78).

184

Рис. 78. Пример монтирования ФС

Функции API

1)Функция CopyFile

Declare Function CopyFile Lib "kernel32.dll" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long

Платформа: Win 95/98, Win NT

CopyFile копирует файл из одного места в другой (операция подобная копированию файлов в Проводнике). В зависимости от значения bFailIfExists, функция либо перепишет файл, если он уже существует, либо возникнет ошибка. В успешном случае функция возвращает 1 , в случае ошибки возвращается 0.

185

Параметры:

lpExistingFileName - файл-источник; т.е. файл для копирования;

lpNewFileName - файл-назначение; т.е. новый файл, являющийся копией файла-источника;

bFailIfExists - если значение равно 0, функция перепишет файл lpNewFileName, если он существует. Если значение отлично от нуля, то произойдет ошибка.

Пример:

'Скопируем файл C:\MySample\temp.txt в C:\Russia\buffer.txt.

'Не будем переписывать файл C:\Russia\buffer.txt если он существует.

Dim retval As Long ' возвращаемое значение ' копируем файл

retval = CopyFile("C:\MySample\temp.txt", "C:\Russia\buffer.txt", 1)

If retval = 0 Then ' если ошибка

Debug.Print "Не могу скопировать файл -- C:\Russia\buffer.txt уже существует.

Else ' если все нормально

Debug.Print "Файл скопирован." End If

2)Функция CreateDirectory

Declare Function CreateDirectory Lib "kernel32.dll" Alias "CreateDirectoryA" (ByVal lpPathName As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long

Платформа

Windows NT: Требуется Windows NT 3.1 или выше.

Windows 2000: Поддерживается.

186

CreateDirectory создает новую папку на диске. Также вы можете установить атрибуты безопасности для вновь созданной папки, если это позволяет операционная система.

Возвращаемое значение

В случае ошибки функция возвращает 0 (используйте GetLastError для получения кода ошибки). В успешном случае функция возвращает значение отличное от нуля.

Параметры:

lpPathName - имя для новой папки;

lpSecurityAttributes - атрибуты безопасности для новой папки.

Пример

'Создаем новую папку C:\RussianProject и

'устанавливаем атрибуты по умолчанию.

Dim Security As SECURITY_ATTRIBUTES ' структура атрибутов безопасности

Dim retval As Long ' возвращаемое значение ' Создаем папку.

retval = CreateDirectory("C:\RussianProject", Security) 'Если CreateDirectory вернул 0, значит ошибка

If retval = 0 Then MsgBox "Ошибка : Не могу создать папку !", vbCritical + vbOKOnly

3)Функция DeleteFile

Declare Function DeleteFile Lib "kernel32.dll" Alias "DeleteFileA" (ByVal lpFileName As String) As Long

Платформа: Win 95/98, Win NT

DeleteFile удаляет файлы (не пересылая их в корзину). Пользуйтесь ею осторожно, так как при этом не появляется сообщение с потверждением удаления файла. В успешном случае функция возвращает 1, в случае ошибки возвращается 0 (например, при отсутствии файла).

187

lpFileName - имя файла для удаления.

Пример:

' Удаляем файл C:\Samples\anyfile.txt

Dim retval As Long ' возвращаемое значение retval = DeleteFile("C:\Samples\anyfile.txt")

If retval = 1 Then Debug.Print "Файл успешно удален."

4)Функция GetFileSize

Declare Function GetFileSize Lib "kernel32" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long

Платформа: Win 95/98, Win NT

GetFileSize определяет размер файла. При ошибке возвращается -1.

hFile - дескриптор файла.Файл следует сначала открыть с помощью CreateFile(),используя флаг OPEN_EXISTING(чтобы проверить существование файла);

lpFileSizeHigh - размер файла.

Пример:

'Определяем размер файла "C:\config.sys". Dim filePointer As Long, fileSize As Long

'получаем дескриптор файла с помощью CreateFile filePointer = CreateFile("c:\config.sys", GENERIC_READ

Or GENERIC_WRITE, 0&, 0&, OPEN_EXISTING, _ FILE_ATTRIBUTE_NORMAL, 0&)

fileSize = GetFileSize(filePointer, 0&) Debug.Print "Размер файла:" fileSize 'закрываем файл

CloseHandle (filePointer)

188

5)Функция MoveFile

Declare Function MoveFile Lib "kernel32.dll" Alias "MoveFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String) As Long

Платформа: Win 95/98, Win NT

MoveFile перемещает или переименовывает файл или папку. Если переименовывается или перемещается папка, то переименовываются или перемещаются все подпапки (изменяются пути к подпапкам). В случае успеха функция возвращает 1, в случае ошибки функция возвращает 0.

lpExistingFileName - файл или папка для перемещения или переименовывания;

lpNewFileName - новое имя для файла или папки, получаемое при перемещении или переименовывания.

Пример:

'Перемещаем файл C:\Samples\temp.txt в C:\RussianProject\buffer.txt.

'При этом файл в папке,из которой идет перемещение,перестает существовать.

Dim retval As Long ' возвращаемое значение retval = MoveFile("C:\Samples\temp.txt",

"C:\RussianProject\buffer.txt")

6)Функция RemoveDirectory

Declare Function RemoveDirectory Lib "kernel32.dll" Alias "RemoveDirectoryA" (ByVal lpPathName As String) As Long

Платформа: Win 95/98, Win NT

RemoveDirectory удаляет папку с диска. Функция не удаляет файлы или подпапки внутри папки. Если папка не является пустой, то происходит ошибка. В случае успеха функция возвращает 1,в случае ошибки функция возвращает 0.

lpPathName - папка для удаления.

189

Папка должна быть пустой.

Пример:

' Удалим папку C:\Samples.

Dim retval As Long ' возвращаемое значение

retval = RemoveDirectory("C:\Samples") ' удаляем папку

If retval = 1 Then ' удаление прошло успешно

Debug.Print "Папка C:\Samples была удалена." Else

Debug.Print "Ошибка. Убедитесь, что папка C:\Samples

пуста." End If

7) Функция SHGetSpecialFolderLocation

Function SHGetSpecialFolderLocation(hwndOwner: HWND;nFolder: Integer; ppidl: PItemIDList):HResult;

Возвращает указатель на список идентификаторов специального обьекта-папки.

Паpаметpы:

hwndOwner - заголовок окна владельца; nFolder - константа CSIDL_;

ppidl - взвращаемый указатель на структуру PItemIDList.

Задание 1. Разработать программу, использующую возможности функций API по работе с папками.

Задание 2. Разработать программу, использующую возможности функций API по работе с файлами.

Задание 3. Разработать программу создания ярлыка приложения на рабочем столе.

190