GetFileAttributesEx读取文件相应属性

简介描述

首先呢,介绍一下文件属性结构体,windows把一个文件的属性用一个结构体来保存,也就下面这些东西会用一个结构体来保存
在这里插入图片描述

结构体如下

typedef struct _WIN32_FILE_ATTRIBUTE_DATA {
    DWORD dwFileAttributes;//判断一个目标为文件夹还是文档,
    //目标为文档是dwFileAttributes的值为FILE_ATTRIBUTE_ARCHIVE(32),
    //而为文件夹时值为FILE_ATTRIBUTE_DIRECTORY(16)
    FILETIME ftCreationTime;  //创建时间
    FILETIME ftLastAccessTime;//修改时间
    FILETIME ftLastWriteTime;//访问时间
    DWORD nFileSizeHigh;
    DWORD nFileSizeLow;
} WIN32_FILE_ATTRIBUTE_DATA, *LPWIN32_FILE_ATTRIBUTE_DATA;

文件里的这个ftCreationTime它是以一串数字(FILETIME类型的数据)来保存的,具体是代表FILETIME类型的创建文件时的世界标准时间 数字,所以需要把它转换成本地的FILETIME时间,最后再把本地的FILETIME时间转换成SYSTEM时间,这个才能让我们能看懂。

FILETIME: 文件时间结构----由高位和低位组成,指针可用LPFILETIME 或 PFILETIME

typedef struct _FILETIME
 {
    DWORD dwLowDateTime;
    DWORD dwHighDateTime;
    
} FILETIME, *PFILETIME, *LPFILETIME;

SYSTEMTIME :系统时间结构----指针可用PSYSTEMTIME 或 LPSYSTEMTIME

typedef struct _SYSTEMTIME
 {
    WORD wYear;
    WORD wMonth;
    WORD wDayOfWeek;
    WORD wDay;
    WORD wHour;
    WORD wMinute;
    WORD wSecond;
    WORD wMilliseconds;
    
} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;

GetFileAttributesEx函数讲解

GetFileAttributesEx(L"读取文件属性代码.cpp", GetFileExInfoStandard, &wafd

第一个参数

第一个参数传入文件名即可,如果是Unicode编译环境下(即宽字节),再加一个L即可。

第二个参数

当第二个参数传入GetFileExInfoStandard后,第三个参数就可以传入_WIN32_FILE_ATTRIBUTE_DATA结构体对象

第三个参数

传入_WIN32_FILE_ATTRIBUTE_DATA结构体对象,就可以获取为第一个文件名的文件属性信息

返回值

如果成功,返回值包含文件或目录的属性。如果失败,返回值是INVALID_FILE_ATTRIBUTES。

部分代码讲解

FileTimeToLocalFileTime(lptime, &ftlocal);

这个函数是把UTC(世界标准时间)的FILETIME时间转换为对应的本地的FILETIME时间

 FileTimeToSystemTime(&ftlocal, &st);

这个函数是把对应的本地的FILETIME时间转换成SYSTEM时间,然后再直接输出相应的时间点

这里稍微补充一下一个相关函数:
LocalFileTimeToFileTime函数将本地的FILETIME时间转换为对应的UTC的FILETIME时间。

代码实现:

#include <iostream>
#include<windows.h>
DWORD ShowFileTime(PFILETIME lptime) {
    FILETIME ftlocal;
    SYSTEMTIME st;
    FileTimeToLocalFileTime(lptime, &ftlocal);
    
    FileTimeToSystemTime(&ftlocal, &st);
    printf("%d年%#02d月%#02d日,%#02d:%#02d:%#02d\n", st.wYear, st.wMonth, st.wDay,st.wHour,st.wMinute,st.wSecond);
    return 0;
}
int main()
{
    WIN32_FILE_ATTRIBUTE_DATA wafd;
    if (!GetFileAttributesEx(L"读取文件属性代码.cpp", GetFileExInfoStandard, &wafd)) {

        printf("获取文件属性失败:%d\n",GetLastError());
        return 1;
    }
    printf("创建时间:");
    ShowFileTime(&wafd.ftCreationTime);
    printf("修改实际:");
    ShowFileTime(&wafd.ftLastAccessTime);
    printf("访问时间:");
    ShowFileTime(&wafd.ftLastWriteTime);
}


在这里插入图片描述
备注:
2021年坚持学写博客第4天(学习两个windows API) 寻梦SS

明日目标:
windows核心编程API函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寻梦&之璐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值