Поделиться через


Функция GetFileInformationByName (winbase.h)

Важно!

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

Запрашивает сведения о файле или каталоге с заданным путем к файлу.

Синтаксис

BOOL GetFileInformationByName(
  PCWSTR                  FileName,
  FILE_INFO_BY_NAME_CLASS FileInformationClass,
  PVOID                   FileInfoBuffer,
  ULONG                   FileInfoBufferSize
);

Параметры

FileName

Имя или путь к файлу.

FileInformationClass

Указывает тип сведений, которые должны быть получены.

FileInfoBuffer

Указатель на буфер, в котором будут храниться полученные данные.

FileInfoBufferSize

Задает размер буфера FileInfoBuffer .

Возвращаемое значение

Если функция завершается сбоем, возвращается значение FALSE, в противном случае — ЗНАЧЕНИЕ TRUE. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Комментарии

Эта подпрограмма возвращает запрошенные сведения о файле, указанном в параметре FileName. Это делается без открытия и возврата дескриптора в файл. Возвращаемые сведения определяются параметром FileInformationClass , который указан и помещается в буфер вызывающего объекта.

Аргумент FileInformationClass должен иметь одно из следующих значений перечисления FILE_INFO_BY_NAME_CLASS . В следующем списке описан тип, который необходимо использовать для параметра FileInfoBuffer :

Тип FileInformationClass Тип FileInfoBuffer
FileStatByNameInfo Буфер сведений о файле должен быть экземпляром FILE_STAT_INFORMATION.
FileStatLxByNameInfo Буфер сведений о файле должен быть экземпляром FILE_STAT_LX_INFORMATION.
FileCaseSensitiveByNameInfo Буфер сведений о файле должен быть экземпляром FILE_CASE_SENSITIVE_INFORMATION.
FileStatBasicByNameInfo Буфер сведений о файле должен быть экземпляром FILE_STAT_BASIC_INFORMATION.

Примеры

Ниже приведен пример запроса сведений о файле класса FileStatByNameInfo по пути к файлу с помощью GetFileInformationByName. Дополнительные сведения о результатах запроса см. в FILE_STAT_INFORMATION .

#include <windows.h> 
#include <winnt.h> 
#include <stdio.h> 

DWORD
GetFileStatInfoByName(
    _In_ PCWSTR FilePath)
{
    DWORD Status = ERROR_SUCCESS;
    FILE_STAT_INFORMATION FileStatInfo;

    if (!GetFileInformationByName(FilePath,
                                  FileStatByNameInfo,
                                  &FileStatInfo,
                                  sizeof(FileStatInfo)))
    {
        Status = GetLastError();
        fwprintf_s(stderr, L"GetFileInformationByName() failed; error %u\n", Status);
    }
    else
    {
        fwprintf_s(stdout, L"FileId             0x%I64X\n",     FileStatInfo.FileId.QuadPart);
        fwprintf_s(stdout, L"CreationTime       0x%I64X\n",     FileStatInfo.CreationTime.QuadPart);
        fwprintf_s(stdout, L"LastAccessTime     0x%I64X\n",     FileStatInfo.LastAccessTime.QuadPart);
        fwprintf_s(stdout, L"LastWriteTime      0x%I64X\n",     FileStatInfo.LastWriteTime.QuadPart);
        fwprintf_s(stdout, L"ChangeTime         0x%I64X\n",     FileStatInfo.ChangeTime.QuadPart);
        fwprintf_s(stdout, L"AllocationSize     0x%I64X\n",     FileStatInfo.AllocationSize.QuadPart);
        fwprintf_s(stdout, L"EndOfFile          0x%I64X\n",     FileStatInfo.EndOfFile.QuadPart);
        fwprintf_s(stdout, L"FileAttributes     0x%08X\n",      FileStatInfo.FileAttributes);
        fwprintf_s(stdout, L"ReparseTag         0x%08X\n",      FileStatInfo.ReparseTag);
        fwprintf_s(stdout, L"NumberOfLinks      %u\n",          FileStatInfo.NumberOfLinks);
        fwprintf_s(stdout, L"EffectiveAccess    0x%08X\n",      FileStatInfo.EffectiveAccess);
    }

    return Status;
} 

Ниже показан пример запроса сведений о файле класса FileStatLxByNameInfo по пути к файлу с помощью GetFileInformationByName. Дополнительные сведения о результатах запроса см. в разделе FILE_STAT_LX_INFORMATION .

#include <windows.h> 
#include <winnt.h> 
#include <stdio.h> 

DWORD
GetFileStatLxInfoByName(
    _In_ PCWSTR FilePath)
{
    FILE_STAT_LX_INFORMATION FileStatInfo;
    DWORD Status = ERROR_SUCCESS;

    if (!GetFileInformationByName(FilePath,
                                  FileStatLxByNameInfo,
                                  &FileStatInfo,
                                  sizeof(FileStatInfo)))
    {
        Status = GetLastError();
        fwprintf_s(stderr, L"GetFileInformationByName() failed; error %u\n", Status);
    }
    else
    {
        fwprintf_s(stdout, L"FileId             0x%I64X\n",     FileStatInfo.FileId.QuadPart);
        fwprintf_s(stdout, L"CreationTime       0x%I64X\n",     FileStatInfo.CreationTime.QuadPart);
        fwprintf_s(stdout, L"LastAccessTime     0x%I64X\n",     FileStatInfo.LastAccessTime.QuadPart);
        fwprintf_s(stdout, L"LastWriteTime      0x%I64X\n",     FileStatInfo.LastWriteTime.QuadPart);
        fwprintf_s(stdout, L"ChangeTime         0x%I64X\n",     FileStatInfo.ChangeTime.QuadPart);
        fwprintf_s(stdout, L"AllocationSize     0x%I64X\n",     FileStatInfo.AllocationSize.QuadPart);
        fwprintf_s(stdout, L"EndOfFile          0x%I64X\n",     FileStatInfo.EndOfFile.QuadPart);
        fwprintf_s(stdout, L"FileAttributes     0x%08X\n",      FileStatInfo.FileAttributes);
        fwprintf_s(stdout, L"ReparseTag         0x%08X\n",      FileStatInfo.ReparseTag);
        fwprintf_s(stdout, L"NumberOfLinks      %u\n",          FileStatInfo.NumberOfLinks);
        fwprintf_s(stdout, L"LxFlags            0x%08X\n",      FileStatInfo.LxFlags);
        fwprintf_s(stdout, L"LxUid              0x%08X\n",      FileStatInfo.LxUid);
        fwprintf_s(stdout, L"LxGid              0x%08X\n",      FileStatInfo.LxGid);
        fwprintf_s(stdout, L"LxMode             0x%08X\n",      FileStatInfo.LxMode);
        fwprintf_s(stdout, L"LxDeviceIdMajor    0x%08X\n",      FileStatInfo.LxDeviceIdMajor);
        fwprintf_s(stdout, L"LxDeviceIdMinor    0x%08X\n",      FileStatInfo.LxDeviceIdMinor);
    }

    return Status;
}

Ниже показан пример запроса сведений о файлах с учетом регистра для класса fileCaseSensitiveByNameInfo с помощью пути к файлу с помощью GetFileInformationByName. Дополнительные сведения о результатах запроса см. в разделе FILE_CASE_SENSITIVE_INFORMATION .

#include <windows.h>
#include <winnt.h>
#include <stdio.h>

DWORD
GetFileStatCaseSensitiveInfoByName(
    _In_ PCWSTR FilePath)
{
    DWORD Status = ERROR_SUCCESS;
    FILE_CASE_SENSITIVE_INFORMATION FileStatInfo;

    if (!GetFileInformationByName(FilePath,
                                  FileCaseSensitiveByNameInfo,
                                  &FileStatInfo,
                                  sizeof(FileStatInfo)))
    {
        Status = GetLastError();
        fwprintf_s(stderr, L"GetFileStatCaseSensitiveInfoByName() failed; error %u\n", Status);
    }
    else
    {
        fwprintf_s(stdout, L"Flags              0x%08X\n",      FileStatInfo.Flags);

    }

    return Status;
}

Ниже приведен пример запроса сведений о файле класса FileStatBasicByNameInfo с помощью пути к файлу с помощью GetFileInformationByName. Дополнительные сведения о результатах запроса см. в разделе FILE_STAT_BASIC_INFORMATION .

#include <windows.h>
#include <winnt.h>
#include <stdio.h>

DWORD
GetFileStatBasicInfoByName(
    _In_ PCWSTR FilePath)
{
    DWORD Status = ERROR_SUCCESS;
    FILE_STAT_BASIC_INFORMATION FileStatInfo;

    if (!GetFileInformationByName(FilePath,
                                  FileStatBasicByNameInfo,
                                  &FileStatInfo,
                                  sizeof(FileStatInfo)))
    {
        Status = GetLastError();
        fwprintf_s(stderr, L"GetFileInformationByName failed; error %u\n", Status);
    }
    else
    {
        fwprintf_s(stdout, L"FileId             0x%I64X\n",     FileStatInfo.FileId.QuadPart);
        fwprintf_s(stdout, L"CreationTime       0x%I64X\n",     FileStatInfo.CreationTime.QuadPart);
        fwprintf_s(stdout, L"LastAccessTime     0x%I64X\n",     FileStatInfo.LastAccessTime.QuadPart);
        fwprintf_s(stdout, L"LastWriteTime      0x%I64X\n",     FileStatInfo.LastWriteTime.QuadPart);
        fwprintf_s(stdout, L"ChangeTime         0x%I64X\n",     FileStatInfo.ChangeTime.QuadPart);
        fwprintf_s(stdout, L"AllocationSize     0x%I64X\n",     FileStatInfo.AllocationSize.QuadPart);
        fwprintf_s(stdout, L"EndOfFile          0x%I64X\n",     FileStatInfo.EndOfFile.QuadPart);
        fwprintf_s(stdout, L"FileAttributes     0x%08X\n",      FileStatInfo.FileAttributes);
        fwprintf_s(stdout, L"ReparseTag         0x%08X\n",      FileStatInfo.ReparseTag);
        fwprintf_s(stdout, L"NumberOfLinks      %u\n",          FileStatInfo.NumberOfLinks);
    }

    return Status;
}

Требования

   
Целевая платформа Windows
Header winbase.h (включая Windows.h)
Библиотека Kernel32.lib
DLL Kernel32.dll

См. также