Продолжаем изучать WinAPI работы с фалами и дисками. Я
думаю, что больше ничего говорить не надо, если ты регулярно читаешь мои статьи,
то уже должен догадаться о чём пойдёт речь.
Сегодня ты узнаешь про:
GetDiskFreeSpaceEx
Функция возвращает информацию о доступном дисковом
пространстве.
Существует в: Win NT, Win9x начиная с Win95 OSR2. До
этого существовала версия GetDiskFreeSpace, которая не учитывает диски большого
размера.
Для С/С++ объявлена в winbase.h. Для Delphi в модуле
windows.
Объявление:
Для С/С++
BOOL GetDiskFreeSpaceEx(
LPCTSTR lpDirectoryName, // Имя диска
PULARGE_INTEGER lpFreeBytesAvailableToCaller,// Здесь вернут количество доступных байт
PULARGE_INTEGER lpTotalNumberOfBytes, // Общее количество байт на диске
PULARGE_INTEGER lpTotalNumberOfFreeBytes // Здесь вернут количество свободных байт
);
Для Delphi
function GetDiskFreeSpaceEx(
lpDirectoryName: PChar; // Имя диска
var lpFreeBytesAvailableToCaller, // Здесь вернут количество доступных байт
lpTotalNumberOfBytes; // Общее количество байт на диске
lpTotalNumberOfFreeBytes: PLargeInteger // Здесь вернут количество свободных байт
): BOOL; stdcall;
Первый параметр содержат имя диска, например 'c:\' или
'D:\'. В остальных параметрах нужно указать переменные типа Int64 (для Delphi),
в которые будут помещены данные о диске.
Если всё ничтяк, то функция вернёт TRUE
GetCompressedFileSize
Функция возвращает сжатый размер файла если он находится
на диске поддерживающем сжатие. Если диск не сжат, то функция вернёт актуальное
значение размера.
Существует в: Win NT
Для С/С++ объявлена в winbase.h. Для Delphi в модуле
windows.
Объявление:
Для С/С++
DWORD GetCompressedFileSize(
LPCTSTR lpFileName, // Имя файла
LPDWORD lpFileSizeHigh // Здесь вернут указатель на размер файла
);
Для Delphi
function GetCompressedFileSize(
lpFileName: PChar; // Имя файла
lpFileSizeHigh: PDWORD // Здесь вернут указатель на размер файла
): DWORD; stdcall;
В параметре lpFileSizeHigh возвращается только верхние
два байта. Нижние два байта вернёт сама функция.
Если всё ничтяк, то функция возвращает младшие два байта
размера диска, иначе возвращает 0xFFFFFFFF.
GetDriveType
Возвращает тип драйва, такого как диск, CD-ROM, сетевой
диск и так далее.
Существует в: Win NT, Win32s, Win9x.
Для С/С++ объявлена в winbase.h. Для Delphi в модуле
windows.
Объявление:
Для С/С++
UINT GetDriveType(
LPCTSTR lpRootPathName // Описатель устройства
);
Для Delphi
function GetDriveType(
lpRootPathName: PChar // Описатель устройства
): UINT; stdcall;
В качестве параметра ты можешь передавать буквы диска в
виде 'a:\', 'B:\', 'C:\' и так далее. Если всё нормально, то функция вернёт:
- 0 - Устройство не определено.
- 1 - The root directory does not exist.
- DRIVE_REMOVABLE - переностное
устройства (типа дисковвода).
- DRIVE_FIXED - не переносное устройство
(типа жёсткого диска).
- DRIVE_REMOTE - удалённое стройство
(типа сетевого диска).
- DRIVE_CDROM - CD-ROM, он и в африке
....
- DRIVE_RAMDISK - диск памяти.
GetFileSize
Функция возвращает размер файла.
Существует в: Win NT, Win32s, Win9x.
Для С/С++ объявлена в winbase.h. Для Delphi в модуле
windows.
Объявление:
Для С/С++
DWORD GetFileSize(
HANDLE hFile, // Указатель на файл
LPDWORD lpFileSizeHigh // Здесь вернут старший байт размера файла
);
Для Delphi
function GetFileSize(
hFile: THandle; // Указатель на файл
lpFileSizeHigh: Pointer // Здесь вернут старший байт размера файла
): DWORD; stdcall;
В параметре lpFileSizeHigh возвращается только верхние
два байта. Нижние два байта вернёт сама функция.
Если всё ничтяк, то функция возвращает младшие два байта
размера файла, иначе возвращает 0xFFFFFFFF.
GetFileType
Функция возвращает тип файла.
Существует в: Win NT, Win32s, Win9x.
Для С/С++ объявлена в winbase.h. Для Delphi в модуле
windows.
Объявление:
Для С/С++
DWORD GetFileType(
HANDLE hFile, // Указатель на файл
);
Для Delphi
function GetFileType(
hFile: THandle; // Указатель на файл
): DWORD; stdcall;
Функция возвращает тип файла. Если всё ничтяк, то
результатом будет:
- FILE_TYPE_UNKNOWN - тип файла не
определён
- FILE_TYPE_DISK - простой дисковый файл
- FILE_TYPE_CHAR - консольный файл или
LPT-устройство
- FILE_TYPE_PIPE - именованный или
анонимный канал.
GetLogicalDrives
Функция возвращает маску доступных дисков
Существует в: Win NT, Win32s, Win9x.
Для С/С++ объявлена в winbase.h. Для Delphi в модуле
windows.
Объявление:
Для С/С++
DWORD GetLogicalDrives(VOID)
Для Delphi
function GetLogicalDrives: DWORD; stdcall;
Функции не нужны параметры. Она возвращает маску
доступных в системе дисков.
Пример использования функции на Delphi:
var
ct: byte;
drives: set of 0..25;
begin
integer(drives) := GetLogicalDrives;
for ct := 0 to 25 do
if ct in drives then
begin
Драйв по имени "char(ct + ord('A')) + ':\'" существует.
Можно выполнить операцию:
Добавить_в_Список_драйвов(char(ct + ord('A')) + ':\');
end;
GetShortPathName
Возвращает укороченный путь к файлу (без использования
длинных имён, как в старом добром DOS).
Существует в: Win NT, Win32s, Win9x.
Для С/С++ объявлена в winbase.h. Для Delphi в модуле
windows.
Объявление:
Для С/С++
DWORD GetShortPathName(
LPCTSTR lpszLongPath, //Указатель на длинный путь к файлу
LPTSTR lpszShortPath, // Сюда поместять результат
DWORD cchBuffer // Длинна буфера, куда поместят результат
);
Для Delphi
function GetShortPathNameA(
lpszLongPath: PAnsiChar; //Указатель на длинный путь к файлу
lpszShortPath: PAnsiChar;// Сюда поместять результат
cchBuffer: DWORD // Длинна буфера, куда поместят результат
): DWORD; stdcall;
Если всё ничтяк, то функция вернёт длину строки
lpszShortPath, где будет находится короткий путь к файлу.
GetTempPath
Возвращает путь к директории, в которой хранятся
временные файлы. По умолчанию это c:\Windows\Temp.
Существует в: Win NT, Win32s, Win9x.
Для С/С++ объявлена в winbase.h. Для Delphi в модуле
windows.
Объявление:
Для С/С++
DWORD GetTempPath(
DWORD nBufferLength, // Размер буфера
LPTSTR lpBuffer // Буфер
);
Для Delphi
function GetTempPath(
nBufferLength: DWORD;// Размер буфера
lpBuffer: PChar // Буфер
): DWORD; stdcall;
Если всё ничтяк, то функция вернёт длину строки
содержащей путь. Сам путь будет находится в буфере (второй параметр).
GetVolumeInformation
Получение информации о диске.
Существует в: Win NT, Win32s, Win9x.
Для С/С++ объявлена в winbase.h. Для Delphi в модуле
windows.
Объявление:
Для С/С++
BOOL GetVolumeInformation(
LPCTSTR lpRootPathName, // Какой диск
LPTSTR lpVolumeNameBuffer, // Буфер для имени метки
DWORD nVolumeNameSize, // Размер буфера метки
LPDWORD lpVolumeSerialNumber, // Серийный номер
LPDWORD lpMaximumComponentLength,// Максимальная длинна компонентов
LPDWORD lpFileSystemFlags, // Системные флаги
LPTSTR lpFileSystemNameBuffer,// Буфер имени файловой системы
DWORD nFileSystemNameSize // Размер буфера имени файловой сист.
);
Для Delphi
function GetVolumeInformationA(
lpRootPathName: PAnsiChar; // Какой диск
lpVolumeNameBuffer: PAnsiChar;// Буфер для имени метки
nVolumeNameSize: DWORD; // Размер буфера метки
lpVolumeSerialNumber: PDWORD; // Серийный номер
var lpMaximumComponentLength, // Максимальная длинна компонентов
lpFileSystemFlags: DWORD; // Системные флаги
lpFileSystemNameBuffer: PAnsiChar;// Системные флаги
nFileSystemNameSize: DWORD // Размер буфера имени файловой сист.
): BOOL; stdcall;
Просто передай в качестве первого параметра имя диска
(например 'C:\') и получи кучу инфы про этот диск.
MoveFile
Переместить существующий файл на новое место.
Существует в: Win NT, Win32s, Win9x.
Для С/С++ объявлена в winbase.h. Для Delphi в модуле
windows.
Объявление:
Для С/С++
BOOL MoveFile(
LPCTSTR lpExistingFileName, // Полный путь к исходному файлу
LPCTSTR lpNewFileName // Полный путь к новому месту
);
Для Delphi
function MoveFile(
lpExistingFileName, // Полный путь к исходному файлу
lpNewFileName: PChar// Полный путь к новому месту
): BOOL; stdcall;
Если все нормально, то функция возвращает TRUE. Пример
на Delphi:
MoveFile('c:\Temp.txt', 'C:\Windows\Temp.txt')
Эта команда переместит файл c:\Temp.txt в
C:\Windows\Temp.txt, при этом он удалится из исходного месторасположения.
Ну всё, на сегодня хватит. В следующий раз закончим
рассмотрение API функций работы с файлами.
|