//获取、设置文件属性和时间
/*提示
将编译生成的.exe文件,复制到C:\Documents and Settings\Administrator 下
在同文件目录下,创建 test1.txt 和 test2.txt
输入命令 APIFileAttribute.exe test1.txt test2.txt
运行结果:获取了test1.txt的文件属性 并且test2.txt 隐藏了
*/
/*头文件*/
#include<windows.h>
#include<stdio.h>
/*函数预申明*/
DWORD ShowFileAttributes (LPSTR szPath); //显示文件属性
DWORD ShowFileTime (PFILETIME lptime); //显示文件时间信息
DWORD ShowFileSize (DWORD dwFileSizeHigh, DWORD dwFileSizeLow); //显示文件大小
DWORD ShowFileAttrInfo (DWORD dwAttribute); //显示文件属性信息
DWORD SetFileHiddenAndReadOnly ( LPSTR szFileName); //设置文件隐藏和只读属性
/***********************************************
//int main(int argc, PCHAR argv[])
//功能:设置和获取文件属性等
//参数:显示第一个参数指定文件的属性、时间、大小
// 将第二个参数的属性设置为隐藏、只读
//返回值: 0代表执行成功,1代表执行发生错误
*********************************************/
int main(int argc, PCHAR argv[])
{
if(argc != 3)
{
printf("请输入参数:\n");
printf("显示第一个参数指定文件的属性、时间、大小;\n");
printf("将第二个文件的属性设置为隐藏、只读");
return 1;
}
ShowFileAttributes(argv[1]); //显示第一个文件属性、时间、大小
SetFileHiddenAndReadOnly(argv[2]); //将第二个文件隐藏
return 0;
}
/*其他函数申明*/
/*******************************************************
//DWORD ShowFileAttributes (LPSTR szPath)
//功能:获取并显示文件属性,调用
// ShowFileTime、ShowFileSize、ShowFileAttrInfo函数
//参数:LPSTR szPath
//返回值: 0代表执行成功,1代表执行发生错误
*********************************************************/
DWORD ShowFileAttributes (LPSTR szPath)
{
//文件属性结构
WIN32_FILE_ATTRIBUTE_DATA wfad;
printf("文件: %s\n",szPath);
//获取文件属性
if(!GetFileAttributesEx(szPath, //输入参数:为需要获取属性的文件或目录
GetFileExInfoStandard, //输入参数:获取文件新的类别
&wfad) ) //返回结果,如果指定为GetFileExInfoStandard,
//返回LPWIN32_FILE_ATTRIBUTE_DATA类型
{
printf("获取文件属性错误:%d\n", 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;
}
//显示时间使用ShowFileTime函数
/******************************************
//DWORD ShowFileTime(PFILETIME lptime)
// 功能:转换文件时间并打印
// 参数:PFILETIME lptime,指向文件的指针
//返回值:0
*******************************************/
DWORD ShowFileTime(PFILETIME lptime)
{
//文件时间结构
FILETIME ftLocal;
//系统时间结构
SYSTEMTIME st;
//调整为系统所在时区的时间
FileTimeToLocalFileTime(lptime, &ftLocal);
//将文件时间转换为SYSTENTIME格式,便于显示
FileTimeToSystemTime(&ftLocal, &st);
//显示时间信息字符串
printf("%4d年%#02d月%#02d日,%#02d:%#02d:%#02d\n",
st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
return 0;
}
//显示大小使用ShowFileSize
/*************************************
//DWORD ShowFileSize (DWORD dwFileSizeHigh, DWORD dwFileSizeLow)
//功能:打印文件大小信息
//参数:DWORD dwFileSizeHigh,文件大小最高值
// DWORD dwFileSizeLow,文件大小最小值
//
**************************************/
DWORD ShowFileSize (DWORD dwFileSizeHigh, DWORD dwFileSizeLow)
{
ULONGLONG liFileSize;
liFileSize = dwFileSizeHigh;
//移动到32位
liFileSize <<= sizeof( DWORD )*8;
liFileSize += dwFileSizeLow;
printf("文件大小:\t%I64u字节\n",liFileSize);
return 0;
}
//显示文件属性使用了ShowFileAttrInfo函数
/***************************************
//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;
}
//在main函数中设置了文件属性,在函数SetFileHiddenAndReadOnly中进行操作
//先获得文件属性,然后使用"|"运算将文件只读和隐藏属性附加到原来的属性上
/******************************************
//DOWRD 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\n",GetLastError());
}
return 0;
}