Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 40038.doc
Скачиваний:
7
Добавлен:
30.04.2022
Размер:
229.89 Кб
Скачать

Функции получения информации о файлах и каталогах:

  • GetCurrentDirectory;

  • GetFullPathName;

  • GetFileAttributes;

  • GetFileSize;

  • FindFistFile;

  • FindNextFile.

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

Синтаксис: DWORD GetCurrentDirectory(dwCurDir, lpCurDir)

DWORD dwCurDir;// размер буфера

LPTSTR lpCurDir;// указатель на буфер для текущей директории

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

Синтаксис: DWORD GetFullPathName(lpFile, dwPath, lpPath, ppFilePart)

LPCTSTR lpFile;// указатель на имя файла

DWORD dwPath;// длина буфера для полного пути к файлу 

LPTSTR lpPath;// указатель на полный путь к файлу (вместе с именем)

LPTSTR *ppFilePart;// указатель на указатель на имя файла в полном пути

GetFileAttributes позволяет вывести информацию об атрибутах файла в виде 32-битового значения. Присвоение файлу атрибутов осуществляется функцией SetFileAttributes.

Синтаксис: DWORD GetFileAttributes(lpFileName) 

LPCTSTR lpszFileName;// указатель на имя файла

GetFileSize помогает получить размер файла. Использованию данной функции должно предшествовать получение идентификатора управления, связанного с файлом HANDLE, например, при помощи функции CreateFile (после завершения работы необходимо выполнить функцию CloseHandle). Функция возвращает младшую часть размера файла (32 бита из 64), старшую часть при необходимости можно получить, задав в качестве одного из параметров указатель на беззнаковое целое (32 бита). Если предполагаемый размер файла не превышает значение 0xFFFFFFFF, то вместо указателя на старшую часть размера файла можно передавать NULL.

Синтаксис: DWORD GetFileSize(hFile, lpdwFileSizeHigh)

HANDLE hFile;// идентификатор управления

LPDWORD lpdwFileSizeHigh;// указатель на старшую часть (32бита) размера файла

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

Синтаксис: HANDLE FindFirstFile(lpSearchFile, lpffd)

LPCTSTR lpSearchFile; // указатель на маску поиска

LPWIN32_FIND_DATA lpffd; // указатель на атрибуты и свойства найденного файла

typedef struct _WIN32_FIND_DATA {

DWORD dwFileAttributes; // атрибуты файла

FILETIME ftCreationTime; // время создания файла

FILETIME ftLastAccessTime; // время последнего обращения к файлу

FILETIME ftLastWriteTime; // время последней записи файла

DWORD nFileSizeHigh; // старшая часть размера файла

DWORD    nFileSizeLow; // младшая часть размера файла

DWORD    dwReserved0; // зарезервированно

DWORD    dwReserved1; // - - - // -

TCHAR    cFileName[ MAX_PATH ]; // имя файла

TCHAR    cAlternateFileName[ 14 ]; // имя в формате 8.3

} WIN32_FIND_DATA;

FindClose закрывает идентификатор управления поиска, открытый функцией FindFirstFile.

Синтаксис: BOOL FindClose(hFindFile)

HANDLE hFindFile; // идентификатор поиска файла

FindNextFile продолжает поиск файла, начатый вызовом функцией FindFirstFile. Возвращает признак успешного выполнения функции (true/false). Входным параметром является идентификатор управления поиска.

Синтаксис: BOOL FindNextFile(hFindFile, lpffd)

HANDLE hFindFile; // идентификатор поиска файла

LPWIN32_FIND_DATA lpffd; // указатель на атрибуты и свойства найденного файла

Информационные функции файловой системы можно в свою очередь условно разделить на дисковые и файловые.

Дисковые функции позволяют получить следующую информацию:

  • наличие диска в системе;

  • тип диска (жесткий, гибкий, сетевой и т.п.);

  • серийный номер и метка диска. Информация о файловой системе:

название файловой системы,

максимальная длина имени файла в символах;

  • информация об объеме диска:

количество кластеров,

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

количество секторов в кластере,

количество байт в секторе и т.п.

Примеры реализации отдельных функций приведены ниже.

Проверка наличия диска в системе

Проверяется существование заданного диска и изменяется значение свойства Caption компоненты Label1

TLabel *Label1;  bool DriveExist(char *diskLetter)

{mdrLetter=CharUpper(diskLetter);

return(GetLogicalDrives()&(1<<(diskLetter[0]-__TEXT('A'))));}

void main ()

{AnsiString myDisk="C:\\";

if  (DriveExist(myDisk.c_str()))Label1->Caption="диск присутствует в данной конфигурации";

else Label1->Caption="диск отсутствует в данной конфигурации";}