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

来源:互联网 发布:股票历史集合竞价数据 编辑:程序博客网 时间:2024/06/05 11:02

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

/*提示
将编译生成的.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;
}


 

原创粉丝点击