WinAPI. Функции работы с файлами. Часть 3

WinAPI
WinAPI. Функции работы с файлами. Часть 3:

Продолжаем изучать 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 функций работы с файлами.



Опубликовал admin
29 Май, Четверг 2003г.



Программирование для чайников.