鱼C论坛

 找回密码
 立即注册
查看: 392|回复: 0

[学习笔记] 获取设置文件属性

[复制链接]
最佳答案
11 
发表于 2018-5-4 16:51:06 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
小弟最近在学习WindowsAPI编程中的文件操作,学习了这个程序,
感谢程序的原作者,但是小弟的这个程序还有一个bug,希望有大佬来解决
  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. /*
  5. *功能:设置和获取文件属性等
  6. *参数:显示第一个参数指定文件的属性,时间,大小
  7. *                将第二个参数的属性设置为隐藏,只读
  8. *返回值:0代表执行完成,1代表发生错误
  9. */

  10. //函数声明
  11. DWORD ShowFileAttributes(LPSTR lpParam1);
  12. DWORD SetFileHiddenAndReadonly(LPSTR lpParam2);
  13. DWORD ShowFileTime(PFILETIME lptime);
  14. DWORD ShowFileSize(DWORD dwFileSizeHigh, DWORD dwFileSizeLow);
  15. DWORD ShowFileAttrInfo(DWORD dwAttribute);


  16. int main(int argc, char *argv[]){
  17.         LPSTR lpParam1 = malloc(sizeof(CHAR)*MAX_PATH);                // 初始化申请空间
  18.         LPSTR lpParam2 = malloc(sizeof(CHAR)*MAX_PATH);
  19.         printf("请输入第一个文件路径:");
  20.         gets(lpParam1);
  21.         printf("请输入第二个文件路径:");
  22.         gets(lpParam2);
  23.         printf("显示第一个参数指定文件的属性,时间,大小\n");
  24.         printf("将第二个参数的属性设置为隐藏,只读\n");

  25.         ShowFileAttributes(lpParam1);
  26.         SetFileHiddenAndReadonly(lpParam2);
  27.         free(lpParam1);
  28.         free(lpParam2);
  29.         return 0;
  30. }


  31. /*
  32. 获取并显示文件属性,调用ShowFileTime,ShowFileSize,和
  33. ShowFileAttrInfo函数

  34. 参数:LPSTR szPath,获取并显示此文件的属性
  35. 返回值:0代表执行完成,1代表发生错误
  36. */
  37. DWORD ShowFileAttributes(LPSTR szPath){
  38.         //文件属性结构
  39.         WIN32_FILE_ATTRIBUTE_DATA wfad;
  40.         printf("文件:%s\n", szPath);

  41.         //获取文件属性
  42.         if (!GetFileAttributesEx(szPath,
  43.                 GetFileExInfoStandard,
  44.                 &wfad)){
  45.                 printf("获取文件属性错误:%d\n", GetLastError());
  46.                 return 1;
  47.         }

  48.         //显示相关时间
  49.         printf("创建时间:\t");
  50.         ShowFileTime(&(wfad.ftCreationTime));
  51.         printf("最后访问时间:\t");
  52.         ShowFileTime(&(wfad.ftLastAccessTime));
  53.         printf("最后修改时间:\t");
  54.         ShowFileTime(&(wfad.ftLastWriteTime));

  55.         //显示文件大小
  56.         ShowFileSize(wfad.nFileSizeHigh, wfad.nFileSizeLow);
  57.         //显示文件属性
  58.         ShowFileAttrInfo(wfad.dwFileAttributes);

  59.         printf("HHHHHHHAAAAAAAAAAAAAAAAAAAA\n");

  60.         return 0;
  61. }

  62. //功能:转换文件时间并打印
  63. //参数:PFILETIME lptime,指向文件时间的指针
  64. DWORD ShowFileTime(PFILETIME lptime){
  65.         //文件时间结构
  66.         FILETIME ftLocal;
  67.         //系统时间结构
  68.         SYSTEMTIME st;
  69.         //调整为系统所在时区的时间
  70.         FileTimeToLocalFileTime(lptime, &ftLocal);

  71.         //将文件时间转化为系统格式,便于显示
  72.         FileTimeToSystemTime(&ftLocal, &st);

  73.         //显示时间信息字符串
  74.         printf("%4d年%#02d月%#02d日,%#02d:%#02d:%#02d\n", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
  75.         return 0;
  76. }


  77. //打印文件大小信息
  78. //参数:DWORD dwFileSizeHigh,文件大小高32位
  79. //DWORD dwFileSizeLow,文件大小低32位
  80. DWORD ShowFileSize(DWORD dwFileSizeHigh, DWORD dwFileSizeLow){
  81.         ULONGLONG liFileSize;
  82.         liFileSize = dwFileSizeHigh;
  83.         //移动32位
  84.         liFileSize <<= sizeof(DWORD) * 8;
  85.         liFileSize += dwFileSizeLow;
  86.         printf("文件大小:\t%I64u字节\n", liFileSize);
  87.         return 0;
  88. }

  89. DWORD ShowFileAttrInfo(DWORD dwAttribute){
  90.         //依此判断属性,并显示
  91.         printf("文件属性:\t");
  92.         if (dwAttribute&FILE_ATTRIBUTE_ARCHIVE){
  93.                 printf("<ARCHIVE>");
  94.         }
  95.         if (dwAttribute&FILE_ATTRIBUTE_COMPRESSED)
  96.                 printf("压缩");
  97.         if (dwAttribute &FILE_ATTRIBUTE_DIRECTORY)
  98.                 printf("目录");
  99.         if (dwAttribute&FILE_ATTRIBUTE_ENCRYPTED)
  100.                 printf("加密");
  101.         if (dwAttribute&FILE_ATTRIBUTE_HIDDEN)
  102.                 printf("隐藏");
  103.         if (dwAttribute&FILE_ATTRIBUTE_NORMAL)
  104.                 printf("NORMAL");
  105.         if (dwAttribute&FILE_ATTRIBUTE_OFFLINE)
  106.                 printf("OFFLINE");
  107.         if (dwAttribute&FILE_ATTRIBUTE_READONLY)
  108.                 printf("只读");
  109.         if (dwAttribute&FILE_ATTRIBUTE_SPARSE_FILE)
  110.                 printf("SPARSE");
  111.         if (dwAttribute&FILE_ATTRIBUTE_SYSTEM)
  112.                 printf("系统文件");

  113.         if (dwAttribute&FILE_ATTRIBUTE_TEMPORARY)
  114.                 printf("临时文件");
  115.         printf("\n");
  116.         return 0;
  117. }


  118. //将指定的文件设置为隐藏和只读
  119. //参数:LPSTR szFileName,文件路径

  120. DWORD SetFileHiddenAndReadonly(LPSTR szFileName){
  121.         //获取原来文件的属性
  122.         DWORD dwFileAttributes = GetFileAttributes(szFileName);
  123.         //将只读和隐藏属性附加到原来的文件属性上
  124.         dwFileAttributes |= FILE_ATTRIBUTE_READONLY;
  125.         dwFileAttributes |= FILE_ATTRIBUTE_HIDDEN;

  126.         //设置文档属性并判断是否成功
  127.         if (SetFileAttributes(szFileName, dwFileAttributes)){
  128.                 printf("文件%s\n的隐藏和属性设置成功\n", dwFileAttributes);
  129.         }
  130.         else{
  131.                 printf("属性设置;%d\n", GetLastError());
  132.         }

  133.         return 0;
  134. }

复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号

GMT+8, 2018-8-20 13:21

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表