本帖最后由 鸦领主 于 2021-3-4 19:41 编辑
1.获取文件属性
GetFileAttributesEx:读取指定文件或目录的属性
GetFileAttributesEx(
LPCSTR lpFileName,
GET_FILEEX_INFO_LEVELS fInfoLevelId,
LPVOID lpFileInformation
)
lpFileName--要读取的文件或目录
fInfoLevelId--GetFileExInfoStandard
lpFileInformation--//指向接收属性信息的缓冲区的指针(这里是读取到WIN32_FILE_ATTRIBUTE_DATA结构体里面)
FileTimeToLocalFileTime:将世界文件时间(FILETIME结构)转换成本地(FILETIME结构)文件时间的
BOOL FileTimeToLocalFileTime(
const FILETIME* lpFileTime,
LPFILETIME lpLocalFileTime
);
lpFileTime--要转换为本地文件时间的FILETIME结构体对象
lpLocalFileTime--接收转换后的FILETIME结构体对象
FileTimeToSystemTime:将本地文件时间转换为本地系统时间
BOOL FileTimeToSystemTime(
const FILETIME* lpFileTime,
LPSYSTEMTIME lpSystemTime
);
lpFileTime--要转换为本地系统时间的FILETIME结构体对象
lpSystemTime--接收转换后的SYSTEMTIME结构体对象
#include<iostream>
#include<windows.h>
using namespace std;
void SetAttribute(LPCTSTR Path)
{
DWORD AttributeHandle = GetFileAttributes(Path);
AttributeHandle |= FILE_ATTRIBUTE_READONLY;//赋值只读属性
AttributeHandle |= FILE_ATTRIBUTE_COMPRESSED;//赋值压缩属于
SetFileAttributes(Path, AttributeHandle);//设置文件属性
}
VOID ShowFileTime(FILETIME &wfad)
{
//SYSTEMTIME结构体包含年月日时分秒等成员
SYSTEMTIME sys;//保存第二次转换后的系统时间
FILETIME file; //保存第一次转换后的本地时间
FileTimeToLocalFileTime(&wfad, &file);//第一次转换 :将 世界文件时间 转换成 本地文件时间
FileTimeToSystemTime(&file, &sys);//第二次转换 :将 本地文件时间 转换成 本地系统时间
printf("%d年%#02d月%#02d日,%#02d:%#02d:%#02d\n",
sys.wYear, sys.wMonth, sys.wDay, sys.wHour, sys.wMinute, sys.wSecond);
}
int main()
{
//WIN32_FILE_ATTRIBUTE_DATA结构体包含
WIN32_FILE_ATTRIBUTE_DATA wfad;
GetFileAttributesEx(L"yyds.txt", GetFileExInfoStandard, &wfad);
cout << "文件创建时间:";
ShowFileTime(wfad.ftCreationTime); //ftCreationTime文件创建时间
cout << "文件修改时间:";
ShowFileTime(wfad.ftLastAccessTime);//ftLastAccessTime文件修改时间
cout << "文件访问时间:";
ShowFileTime(wfad.ftLastWriteTime);//ftLastWriteTime文件访问时间
windows API学习,获取文件属性
GetFileAttributes:获取指定文件属性
DWORD GetFileAttributesA(
LPCSTR lpFileName//要获取属性的文件的名称
);
成功返回文件属性,失败返回INVALID_FILE_ATTRIBUTES<span style="box-sizing: inherit; font-weight: 600; outline-color: inherit; color: rgb(23, 23, 23); font-family: "Segoe UI", SegoeUI, "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"></span>
SetFileAttributes:为文件或目录设置属性。
BOOL SetFileAttributesA(
LPCSTR lpFileName,//要设置属性的文件的名称。
DWORD dwFileAttributes//要为文件设置的文件属性
);
成功返回非0,失败返回0
2.获取Windows目录名
GetSystemDirectory:获取Windows目录名路径
UINT WINAPI GetSystemDirectory(
LPTSTR lpBuffer,
UINT uSize)
lpBuffer--存放获取到的路径的缓冲区
uSize--lpBuffer字串的最大长度
CHAR Buffer[MAX_PATH];//MAX_PATH表示260,路径长度一般最大就是260
GetSystemDirectory(Buffer, MAX_PATH);
cout << Buffer;
windows API学习,获取文件属性 获取Windows目录名 创建文件读取
3.创建文件,读取,写入
CreateFile:这是一个多功能的函数,可打开或创建文件或者I/O设备,并返回可访问的句柄:控制台,通信资源,目录(只读打开),磁盘驱动器,文件,邮槽,管道。
HANDLE CreateFileA(
LPCSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile
);
lpFileName--要创建或打开的文件或设备的名称
dwDesiredAccess--对文件或设备所请求的访问权限,可概括为读、写或都有(GENERIC_READ、GENERIC_WRITE、GENERIC_READ| GENERIC_WRITE)
dwShareMode--共享模式(如果是0表示不共享)
lpSecurityAttributes--指向安全属性的指针(一般填入NULL,默认安全属性)
dwCreationDisposition--指定当文件存在或不存在时的操作。常见的操作有5种:
CREATE_NEW:创建文件,如果文件存在会出错;
CREATE_ALWAYS:创建文件,会修改前一个文件;
OPEN_EXISTING:文件已经存在;
OPEN_ALWAYS:如果不存在就创建;
TRUNCATE_EXISTING:将现有的文件缩短为零长度;
dwFlagsAndAttributes--表示新创建文件的属性。文件的常见属性有5种:
FILE_ATTRIBUTE_ARCHIVE:标记为归档属性;
FILE_ATTRIBUTE_NORMAL:默认属性;
FILE_ATTRIBUTE_HIDDEN:隐藏文件或目录;
FILE_ATTRIBUTE_READONLY:文件为只读;
FILE_ATTRIBUTE_SYSTEM:文件为系统文件;
hTemplateFile--模板文件的有效句柄(没有模板就填NULL)
如果函数成功,则返回值是指定文件、设备、命名管道或邮件槽的打开句柄。
如果函数失败,返回值为INVALID_HANDLE_VALUE
ReadFile:从指定的文件或输入 / 输出(I / O)设备读取数据
BOOL ReadFile(
HANDLE hFile,
LPVOID lpBuffer,
DWORD nNumberOfBytesToRead,
LPDWORD lpNumberOfBytesRead,
LPOVERLAPPED lpOverlapped
);
hFile--CreateFile返回的句柄
lpBuffer--存放读取出来的数据的缓存区
nNumberOfBytesToRead--每次读取多少字节
lpNumberOfBytesRead--实际读取了多少字节
lpOverlapped--一般就写入NULL
如果函数成功,则返回值为非零(真的)
如果函数失败或正在异步完成,则返回值为零
WriteFile:将数据写入指定的文件或输入 / 输出(I / O)设备
BOOL WriteFile(
HANDLE hFile,
LPCVOID lpBuffer,
DWORD nNumberOfBytesToWrite,
LPDWORD lpNumberOfBytesWritten,
LPOVERLAPPED lpOverlapped
);
hFile--CreateFile返回的句柄
lpBuffer--要写入到文件里面的内容
nNumberOfBytesToWrite--要写入数据的字节数量
lpNumberOfBytesWritten--实际写入的数量
lpOverlapped--一般就写入NULL
如果函数成功,则返回值为非零(真的)
如果函数失败或正在异步完成,则返回值为零
|