最近一直在学习windows API,但是经常会把之前学过的函数忘了 再找的时候又不方便 于是把它写在这里 一来可以当作自己学习的备忘,二来可以作为向我一样在奋斗的。。。 呃。。。有志青年(哈哈~小小鄙视自己一把)作为参考,噢呜~废话少说,上菜。。。
WINDOWS API学习笔记之获取文件属性和设置文件隐藏
#include<Windows.h>
#include<iostream>
using namespace std;
DWORD ShowFileAttributes(LPTSTR szPath);
DWORD ShowFileTime(PFILETIME lptime);
DWORD ShowFileAttrInfo(DWORD dwAttribute);
DWORD SetFileHiddenAndReadonly(LPSTR szFileName);
DWORD ShowFileSize(DWORD dwFileSizeHigh,DWORD dwFileSizeLow);
int main(int argc,PCHAR argv[])
{
if (argc!=3)
{
printf("请输入参数\n");
printf("显示第一个参数指定的文件属性、时间、大小\n");
printf("将第二个参数的属性设置为隐藏、只读\n");
system("pause");
return 1;
}
ShowFileAttributes(argv[1]);
SetFileHiddenAndReadonly(argv[2]);
system("pause");
return 0;
}
/*ShowFileAttributes(LPSTR szPath)
*功能:获取并显示文件属性
*调用ShowFileTime、ShowFileSize和ShowFileAttrInfo
*参数:LPTSTR szPath 获取并显示文本属性
*返回值:0代表执行完成 ,1代表发生错误
**************/
DWORD ShowFileAttributes(LPTSTR szPath)
{
//文件属性结构
WIN32_FILE_ATTRIBUTE_DATA wfad;
printf("文件:%s\n",szPath);
//获取文件属性
if (!GetFileAttributesEx(szPath,
GetFileExInfoStandard,
&wfad
))
{
printf("获取文件属性错误:%d",GetLastError());
return 1;
}
//显示相关时间
printf("创建时间:\t");
ShowFileTime(&(wfad.ftCreationTime));
printf("最后访问时间:\t");
ShowFileTime(&(wfad.ftLastAccessTime));
printf("最后修改时间:\t");
ShowFileTime(&(wfad.ftLastWriteTime));
//显示文本大小
ShowFileSize(wfad.nFileSizeHigh,wfad.nFileSizeLow);
//显示文本属性
ShowFileAttrInfo(wfad.dwFileAttributes);
return 0;
}
/*DWORD ShowFileTime(PFILETIME lptime)
*功能:转换文件时间并打印
*参数:PFILETIMR lptime 指向文件的时间的指针
*返回值:0
**********************/
DWORD ShowFileTime(PFILETIME lptime)
{
//文件时间结构
FILETIME ftLocal;
//系统时间结构
SYSTEMTIME st;
//调整为系统所在时区的时间
FileTimeToLocalFileTime(
lptime,
&ftLocal
);
//将文件时间转换为SYSTEMTIME格式,便于显示
FileTimeToSystemTime(
lptime,
&st);
//显示时间信息字符串
printf("%4d年%#02d月%#02d日,%#02d:%#02d:%#02d\n",
st.wYear,
st.wMonth,
st.wDay,
st.wHour,
st.wMinute,
st.wSecond
);
return 0;
}
/*DWORD ShowFileSize(DWORD dwFileSizeHigh,DWORD dwFileSizeLow)
*功能:打印文件大小信息
*参数:DWORD dwFileSizeHigh,文件大小高32位
* DWORD dwFileSizeLow ,文件大小低32位
**********************************/
DWORD ShowFileSize(DWORD dwFileSizeHigh,DWORD dwFileSizeLow)
{
ULONGLONG liFileSize;
liFileSize = dwFileSizeHigh;
//移动到32位
liFileSize<<=sizeof(DWORD)*8;
liFileSize+=dwFileSizeLow;
printf("文件大小:\t%I64u字节\n",liFileSize);
return 0;
}
/*DWORD ShowFileAttrInfo(DWORD dwAttribute)
*功能:打印文件属性
*参数:DWORD dwAttribute,文件属性
**************************************/
DWORD ShowFileAttrInfo(DWORD dwAttribute)
{
//依次判断属性,并显示
printf("文件属性:\t");
if(dwAttribute&FILE_ATTRIBUTE_ARCHIVE)
printf("<ARCHIVE>");
if(dwAttribute&FILE_ATTRIBUTE_COMPRESSED)
printf("<压缩>");
if(dwAttribute&FILE_ATTRIBUTE_DIRECTORY)
printf("<目录>");
if(dwAttribute&FILE_ATTRIBUTE_ENCRYPTED)
printf("<加密>");
if(dwAttribute&FILE_ATTRIBUTE_HIDDEN)
printf("<隐藏>");
if(dwAttribute&FILE_ATTRIBUTE_NORMAL)
printf("<NORMAL>");
if(dwAttribute&FILE_ATTRIBUTE_OFFLINE)
printf("<OFFLINE>");
if(dwAttribute&FILE_ATTRIBUTE_READONLY)
printf("<只读>");
if(dwAttribute&FILE_ATTRIBUTE_SPARSE_FILE)
printf("<SPARSE>");
if(dwAttribute&FILE_ATTRIBUTE_SYSTEM)
printf("<系统文件>");
if(dwAttribute&FILE_ATTRIBUTE_TEMPORARY)
printf("<临时文件>");
printf("\n");
return 0;
}
/*DWORD SetFileHiddenAndReadonly(LPSTR szFileName)
*功能:将指定文件设置为隐藏和只读
*参数:LPSTR szFileName,文件路径
*********************************************/
DWORD SetFileHiddenAndReadonly(LPSTR szFileName)
{
//获取原来的文件属性
DWORD dwFileAttributes = GetFileAttributes(szFileName);
//将只读和隐藏属性附加到原来的文件属性上
dwFileAttributes|=FILE_ATTRIBUTE_READONLY;
dwFileAttributes|=FILE_ATTRIBUTE_HIDDEN;
//设置属性,并判断是否成功
if (SetFileAttributes(szFileName,dwFileAttributes))
{
printf("文件%s的隐藏和属性设置成功\n",szFileName);
}
else
{
printf("属性设置;%d",GetLastError());
}
return 0;
}
最后运行结果如图
![哦,小小提示下,这里哦可是用的WIN 10 哈哈~](http://img.blog.csdn.net/20150825162626635)