您的位置:首页 > 其它

SDK获取、设置文件属性和时间

2013-04-08 10:04 429 查看
//获取、设置文件属性和时间

/*提示

将编译生成的.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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: