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

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

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

Параметры:

lpRootPathName - корневой каталог диска, например

"c:\" или "a:\" ;

lpSectorsPerCluster - число секторов в кластере;

lpBytesPerSector - число байт в секторе;

lpNumberOfFreeClusters - число свободных кластеров, Windows 2000: это может быть более низкое чем фактическое значение;

lpTotalNumberOfClusters - общее число кластеров,

Windows 2000: это может быть более низкое чем фактическое значение.

Пример

' Считаем и отображаем количество свободного места и общего объема диска C:

Dim secPerClus As Long ' число секторов в кластере

Dim bytePerSec As Long ' число байт в секторе

Dim freeClus As Long ' число свободных кластеров

Dim totalClus As Long ' общее число кластеров

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

retval = GetDiskFreeSpace("c:\", secPerClus, bytePerSec, freeClus, totalClus)

' Отображаем информацию

Debug.Print "Свободно:"; freeClus * secPerClus * bytePerSec; "байт"

Debug.Print "Общий объем:"; totalClus * secPerClus * bytePerSec; "байт"

2) Функция GetDriveType

Declare Function GetDriveType Lib "kernel32.dll" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long

141

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

GetDriveType определяет типы дисков на компьютере. Это могут быть жесткие диски, флоппи-диски, CD-ROM и др. Функция возвращает тип диска. Если 0-значит ошибка, если 1- значит диск не существует, другие возвращаемые значения означают следующее:

DRIVE_CDROM = 5 CD-ROM. DRIVE_FIXED = 3

Жесткий диск. DRIVE_RAMDISK = 6 RAM-диск. DRIVE_REMOTE = 4

Сетевой диск. DRIVE_REMOVABLE = 2

Сменный диск (напр. дискетта или любой сменный диск).

nDrive - корневой каталог диска,как "c:\" или "a:\"

Пример

' Определяем тип диска D: Dim drivetype As Long

drivetype = GetDriveType("d:\")

If drivetype = 1 Then Debug.Print "Диск D:\ не существует."

If drivetype = DRIVE_REMOVABLE Then Print "Диск D:\

сменный диск."

If drivetype = DRIVE_FIXED Then Print "Диск D:\ жест-

кий диск."

If drivetype = DRIVE_CDROM Then Print "Диск D:\ CDROM."

' и т.д.

142

3) Функция GetFileAttributes

Declare Function GetFileAttributes Lib "kernel32.dll" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long

Платформа:

Win 95/98, Win NT

GetFileAttributes возвращает атрибуты файла или папки. При ошибке возвращает 0,если файл или папка не найдены, то возвращается -1. В других случаях, возвращаемое значение принимает следующие флаги:

FILE_ATTRIBUTE_ARCHIVE = &H20

Архивный файл. FILE_ATTRIBUTE_COMPRESSED = &H800

Сжатый файл. FILE_ATTRIBUTE_DIRECTORY = &H10

Имя папки. FILE_ATTRIBUTE_HIDDEN = &H2

Скрытый файл или папка. Обычно его не видно пользователю.

FILE_ATTRIBUTE_NORMAL = &H80

Файл не имеет атрибутов (нельзя комбинировать с другими флагами).

FILE_ATTRIBUTE_READONLY = &H1

Файл только для чтения. FILE_ATTRIBUTE_SYSTEM = &H4

Системный файл. Является частью операционной систе-

мы.

lpFileName - полное имя файла или папки.

Пример

' показываем атрибуты файла c:\autoexec.bat Dim attribs As Long

143

attribs = GetFileAttributes("C:\autoexec.bat") ' узнаем ат-

рибуты файла

If (attribs And FILE_ATTRIBUTES_ARCHIVE) <> 0 Then Debug.Print "Архивный"

If (attribs And FILE_ATTRIBUTES_HIDDEN) <> 0 Then Debug.Print "Скрытый"

If (attribs And FILE_ATTRIBUTES_READONLY) <> 0 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

144

'закрываем файл

CloseHandle (filePointer)

5) Функция GetFullPathName

Declare Function GetFullPathName Lib "kernel32.dll" Alias "GetFullPathNameA" (ByVal lpFileName As String, ByVal nBufferLength As Long, ByVal lpBuffer As String, ByVal lpFilePart As String) As Long

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

GetFullPathName возвращает полный путь к файлу. Функция возвращает 0 в случае ошибки, или длину строки в успешном случае.

lpFileName - имя файла;

nBufferLength - размер в символах lpBuffer; lpBuffer - строка

lpFilePart - ??? (адрес ячейки размером с двойное слово, в которое помещается указатель на позицию внутри буфера, идентифицированную параметром 1 lpBuffег и соответствующую первому символу имени файла после имен всех каталогов).

Пример:

' определяем полное имя файла autoexec.bat Dim buffer As String

Dim numchar As Long ' длина буфера после вызова функции

ChDir "c:\" ' выбираем папку

buffer = Space(255) ' создаем место для приема строки numchar = GetFullPathName("autoexec.bat", 255, buffer,

"") font color="green"> ' помещаем строку в буфер

buffer = Left(buffer, numchar) ' извлекаем имя файла

145

Debug.Print buffer ' показываем результат

6) Функция GetLogicalDriveStrings

Declare Function GetLogicalDriveStrings Lib "kernel32.dll" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long

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

GetLogicalDriveStrings определяет имеющие силу логические диски на компьютере и размещает их названия корневых каталогов в строку lpBuffer. Каждое имя корневого каталога в буфере отделено нулевым символом, и полными строковыми концами в двух нулевых символах. Например, если существуют только A: и C: , строка будет " a: \ (пустой указатель) c: \ (пустой указатель) (пустой указатель) ", где (пустой указатель) представляет нулевой символ. Функция возвращает 0, если произошла ошибка, или длина строки, помещенной в lpBuffer, если функция выполнена успешно.

nBufferLength - длина строки в буфере lpBuffer;

lpBuffer - строка, которая получает имена всех логических дисков.

Пример:

'Перечисляем имена всех корневых каталогов. Так как каждый вход в строке берет

'Четыре символа (три для имени и один для пустого ука-

зателя), мы можем рассчитать длину строки.

' Это освобождает нас от проблем относительно пустых указателей.

Dim drivenames As String ' получаем имена дисков Dim thisdrive As String ' буфер для имени диска Dim c As Long ' счетчик

Dim slength As Long ' длина возвращаемой строки

146

' Создаем место в буфере для имен дисков. drivenames = Space(255) ' должно хватить

' Получаем имена всех дисков.

slength = GetLogicalDriveStrings(255, drivenames)

' считаем по 4 символа для извлечения имен каждого диска.

For c = 1 To slength Step 4 '

thisdrive = Mid(drivenames, c, 3) ' извлекаем 3-х сим-

вольную строку X:\ (где X-буква диска)

Debug.Print thisdrive ' показываем имена дисков Next c

7) Функция SetFileAttributes

Declare Function SetFileAttributes Lib "kernel32.dll" Alias "SetFileAttributesA" (ByVal lpFileName As String, ByVal dwFileAttributes As Long) As Long

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

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

lpFileName - полное имя файла или папки; dwFileAttributes - один или несколько флагов, определя-

ющих атрибуты файла: FILE_ATTRIBUTE_ARCHIVE = &H20

Архивный файл. FILE_ATTRIBUTE_HIDDEN = &H2

Скрытый файл или папка. Обычно его не видно пользователю.

FILE_ATTRIBUTE_NORMAL = &H80

147

Файл не имеет атрибутов(нельзя комбинировать с другими флагами).

FILE_ATTRIBUTE_READONLY = &H1

Файл только для чтения. FILE_ATTRIBUTE_SYSTEM = &H4

Системный файл. Является частью операционной систе-

мы.

Пример:

'устанавливаем атрибуты файла C:\MyProgram\secret.dat

вскрытый, только для чтения, архивный

Dim fileattrs As Long ' атрибуты

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

FILE_ATTRIBUTE_HIDDEN Or

FILE_ATTRIBUTE_READONLY

retval = SetFileAttributes("C:\MyProgram\secret.dat", fileattrs) ' Устанавливаем атрибуты

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

Ход выполнения работы

1)Создать консольное приложение

2)В редакторе кода добавить пространство имен

using System.IO;

3)В методе Main() добавить стандартный метод для определения всех дисков на данном компьютере:

DriveInfo[] allDrives = DriveInfo.GetDrives();

4)Организовать цикл, который позволяет пройти все значения заданного множества:

foreach (DriveInfo d in allDrives)

148

{

}

5) В цикл добавить выдачу на экран информации об имени диска и его типе:

Console.WriteLine("Диск {0}", d.Name); Console.WriteLine(" Тип: {0}", d.DriveType);

6) В цикле добавить проверку возможности чтения информации с диска:

if (d.IsReady == true)

{

}

7)В том случае если условие выполняется, выдать на экран информацию о файловой системе, свободном пространстве для данного пользователя, свободном пространстве на диске и размере диска:

Console.WriteLine(" Файловая система: {0}", d.DriveFormat);

Console.WriteLine(" Свободное пространство для данного пользователя:{0, 5} bytes", d.AvailableFreeSpace); Console.WriteLine(" Свободное пространство на

диске: {0, 5} bytes", d.TotalFreeSpace); Console.WriteLine(" Размер диска: {0, 5} bytes ",

d.TotalSize);

8)Запустить приложение на выполнение, отладить. Пример работы программы представлен на рис. 71.

149

Рис. 71. Результат работы консольного приложения

Задание 2. Разработать Windows приложение, позволяющее пользователю определять размер диска и его свободное пространство в гигабайтах или мегабайтах.

Просмотреть функции API, описанные выше и относящиеся к данному заданию, применить их в приложении (самостоятельно).

Ход выполнения работы

1)Запустить Visual Studio, создать оконное приложение.

2)На форме установить следующие компоненты:

-comboBox1, где будет представлен перечень дисков данного компьютера;

-listBox1, где будет выдаваться информация о размере

диска;

-listBox2, где будет представлен перечень папок выбранного диска;

-listBox3, где будет представлен список файлов выбранной папки;

-label1, label2, label3, label4 для пояснительных надписей.

3) В текст программы добавить:

using System.IO;

4) После объявления формы

150