c/c++语言开发共享C/C++ Windows API:文件/文件夹

// fileoperationdemo.cpp : defines the entry point for the console application. // #include &

  // fileoperationdemo.cpp : defines the entry point for the console application.  //    #include "stdafx.h"  #include     int main()  {      bool ret;      lpcwstr filepath1 = l"c:\users\chenjia2014\desktop\file_demo_test1.txt";      lpcwstr filepath2 = l"c:\users\chenjia2014\desktop\file_demo_test2.txt";      lpcwstr dirpath1 = l"c:\users\chenjia2014\desktop\dir_demo_test1";      lpcwstr dirpath2 = l"c:\users\chenjia2014\desktop\dir_demo_test2";        /*      创建文件      handle createfile(        lpctstr lpfilename, //指向文件名的指针        dword dwdesiredaccess, //访问模式(写/读), 如果为 generic_read 表示允许对设备进行读访问;如果为 generic_write 表示允许对设备进行写访问(可组合使用);如果为零,表示只允许获取与一个设备有关的信息        dword dwsharemode, //共享模式, 0表示不共享; file_share_read 和/或 file_share_write 表示允许对文件进行共享访问        lpsecurity_attributes lpsecurityattributes, //指向一个security_attributes安全属性结构的指针,定义了文件的安全特性(如果操作系统支持的话),默认为0        dword dwcreationdisposition, //如何创建        dword dwflagsandattributes, //文件属性        handle htemplatefile //用于复制文件句柄, 如果不为零,则指定一个文件句柄。新文件将从这个文件中复制扩展属性    );        dwdesiredaccess long,下述常数之一:      #define file_generic_read         (standard_rights_read     |          file_read_data           |          file_read_attributes     |          file_read_ea             |          synchronize)      #define file_generic_write        (standard_rights_write    |          file_write_data          |          file_write_attributes    |          file_write_ea            |          file_append_data         |          synchronize)      #define file_generic_execute      (standard_rights_execute  |          file_read_attributes     |          file_execute             |          synchronize)        dwcreationdisposition long,下述常数之一:      create_new 创建文件;如文件存在则会出错      create_always 创建文件,会改写前一个文件      open_existing 文件必须已经存在。由设备提出要求      open_always 如文件不存在则创建它      truncate_existing 讲现有文件缩短为零长度        dwsharemode long,下述常数之一:      #define file_share_read                 0x00000001      #define file_share_write                0x00000002      #define file_share_delete               0x00000004        dwflagsandattributes long, 一个或多个下述常数      file_attribute_archive 标记归档属性      file_attribute_compressed 将文件标记为已压缩,或者标记为文件在目录中的默认压缩方式      file_attribute_normal 默认属性      file_attribute_hidden 隐藏文件或目录      file_attribute_readonly 文件为只读      file_attribute_system 文件为系统文件      file_flag_write_through 操作系统不得推迟对文件的写操作      file_flag_overlapped 允许对文件进行重叠操作      file_flag_no_buffering 禁止对文件进行缓冲处理。文件只能写入磁盘卷的扇区块      file_flag_random_access 针对随机访问对文件缓冲进行优化      file_flag_sequential_scan 针对连续访问对文件缓冲进行优化      file_flag_delete_on_close 关闭了上一次打开的句柄后,将文件删除。特别适合临时文件      */      dword dwdesiredaccess = generic_read | generic_write;      dword dwsharemode = 0;      lpsecurity_attributes lpsecurityattributes = 0;      dword dwcreationdisposition = create_new;      dword dwflagsandattributes = file_attribute_normal;      handle htemplatefile = 0;      handle handle = createfile(filepath1, dwdesiredaccess, dwsharemode, lpsecurityattributes, dwcreationdisposition, dwflagsandattributes, htemplatefile);      printf("createfile -> handle=0x%xn", handle);        if (handle != invalid_handle_value) {            filetime fcreationtime, flastaccesstime, flastwritetime;          // getfiletime函数用来获得一个文件或目录的创建的时间、最后访问的时间以及最后修改的时间          ret = getfiletime(handle, &fcreationtime, &flastaccesstime, &flastwritetime);          if (ret == 0) {              printf("getfiletime fail(%d)n", getlasterror());          }          else {              printf("getfiletime -> %dn", ret);          }            /*          根据一个filetime结构的内容,装载一个systemtime结构。          winbaseapi _success_(return != false) bool winapi filetimetosystemtime(              _in_ const filetime * lpfiletime,              _out_ lpsystemtime lpsystemtime          );          */          systemtime syscreationtime, syslastaccesstime, syslastwritetime;          ret = filetimetosystemtime(&fcreationtime, &syscreationtime);          if (ret == 0) {              printf("filetimetosystemtime creationtime fail(%d)n", getlasterror());          }          else {              printf("filetimetosystemtime creationtime -> %dn", ret);              printf("%4d年%2d月%2d日,%2d:%2d:%2dn", syscreationtime.wyear, syscreationtime.wmonth, syscreationtime.wday, syscreationtime.whour, syscreationtime.wminute, syscreationtime.wsecond);          }          ret = filetimetosystemtime(&flastaccesstime, &syslastaccesstime);          if (ret == 0) {              printf("filetimetosystemtime lastaccesstime fail(%d)n", getlasterror());          }          else {              printf("filetimetosystemtime lastaccesstime -> %dn", ret);              printf("%4d年%2d月%2d日,%2d:%2d:%2dn", syslastaccesstime.wyear, syslastaccesstime.wmonth, syslastaccesstime.wday, syslastaccesstime.whour, syslastaccesstime.wminute, syslastaccesstime.wsecond);          }          ret = filetimetosystemtime(&flastwritetime, &syslastwritetime);          if (ret == 0) {              printf("filetimetosystemtime lastwritetime fail(%d)n", getlasterror());          }          else {              printf("filetimetosystemtime lastwritetime -> %dn", ret);              printf("%4d年%2d月%2d日,%2d:%2d:%2dn", syslastwritetime.wyear, syslastwritetime.wmonth, syslastwritetime.wday, syslastwritetime.whour, syslastwritetime.wminute, syslastwritetime.wsecond);          }            //用完要记得关闭,否则其他操作会失败,getlasterror()=32 => 进程无法访问文件,因为另一个程序正在使用此文件。          closehandle(handle);      }        /*      复制文件      bool winapi copyfile(          _in_ lpctstr lpexistingfilename,          _in_ lpctstr lpnewfilename,          _in_ bool    bfailifexists      );      return 失败返回0,成功返回非0。      */      ret = copyfile(filepath1, filepath2, true);      if (ret == 0) {          printf("copyfile fail(%d)n", getlasterror());      }      else {          printf("copyfile -> %dn", ret);      }        /*      删除文件      bool deletefile(          lpcstrlpfilename//要删除的文件名的指针      );      return 失败返回0,成功返回非0。如果程序尝试删除一个不存在的文件。getlasterror返回error_file_not_found。如果文件是只读 的,则getlasterror返回error_access_denied      */      ret = deletefile(filepath1);      if (ret == 0) {          printf("deletefile fail(%d)n", getlasterror());      }      else {          printf("deletefile -> %dn", ret);      }        /*      移动一个存在的文件或者目录(包括子目录)      winbaseapi bool winapi movefilew(          _in_ lpcwstr lpexistingfilename,          _in_ lpcwstr lpnewfilename      );      return 失败返回0,成功返回非0。      */      ret = movefile(filepath2, filepath1);      if (ret == 0) {          printf("movefile fail(%d)n", getlasterror());      }      else {          printf("movefile -> %dn", ret);      }        /*      winbaseapi dword winapi getfileattributesw(          _in_ lpcwstr lpfilename      );        #define file_attribute_readonly             0x00000001      #define file_attribute_hidden               0x00000002      #define file_attribute_system               0x00000004      #define file_attribute_directory            0x00000010      #define file_attribute_archive              0x00000020      #define file_attribute_device               0x00000040      #define file_attribute_normal               0x00000080      #define file_attribute_temporary            0x00000100      #define file_attribute_sparse_file          0x00000200      #define file_attribute_reparse_point        0x00000400      #define file_attribute_compressed           0x00000800      #define file_attribute_offline              0x00001000      #define file_attribute_not_content_indexed  0x00002000      #define file_attribute_encrypted            0x00004000      #define file_attribute_integrity_stream     0x00008000      #define file_attribute_virtual              0x00010000      #define file_attribute_no_scrub_data        0x00020000      #define file_attribute_ea                   0x00040000      */      dword attr = getfileattributes(filepath1);      if (attr == invalid_file_attributes) {          printf("getfileattributes fail(%d)", getlasterror());      }      else {          printf("getfileattributes -> 0x%xn", attr);      }        deletefile(filepath1);        /*      创建文件夹(注意: 目录没有复制操作)      winbaseapi bool winapi createdirectoryw(          _in_ lpcwstr lppathname,          _in_opt_ lpsecurity_attributes lpsecurityattributes      );      return 失败返回0,成功返回非0。      */      ret = createdirectory(dirpath1, 0);      if (ret == 0) {          printf("createdirectory fail(%d)n", getlasterror());      }      else {          printf("createdirectory -> %dn", ret);      }        /*      删除目录(注意:目录必须为空,否则会报145错误)      winbaseapi bool winapi removedirectoryw(          _in_ lpcwstr lppathname      );      */      ret = removedirectory(dirpath1);      if (ret == 0) {          printf("removedirectory fail(%d)n", getlasterror());      }      else {          printf("removedirectory -> %dn", ret);      }        system("pause");      return 0;  }

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/608102.html

(0)
上一篇 2021年5月15日
下一篇 2021年5月15日

精彩推荐