| Продолжаем изучать WinAPI работы с фалами и дисками. Я думаю, что больше ничего говорить не надо, если ты регулярно читаешь мои статьи, то уже должен догадатся о чём пойдёт речь. Сегодня ты узнаешь про: GetDiskFreeSpaceEx GetCompressedFileSize GetDriveType GetFileSize GetFileType GetLogicalDrives GetShortPathName GetTempPath GetVolumeInformation MoveFile 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 функций работы с файлами.
|