zoukankan      html  css  js  c++  java
  • C++实现将一个文件夹内容拷贝至另一个文件夹

    Windows提供了非常好用的方法SHFileOperation,而且功能强大, 不光可以拷贝,还有移动、删除等等操作。直接上代码:

     1 void CopyFolder(TCHAR* srcFolder, TCHAR* dstFolder)
     2 {
     3     SHFILEOPSTRUCT fop = {0};
     4     fop.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR;
     5     fop.wFunc = FO_COPY;//选择执行类型,FO_COPY,FO_DELETE,FO_RENAME,FO_MOVE四种
     6 
     7     fop.pFrom = srcFolder;//如:D:\*.txt
     8     fop.pTo = dstFolder;//D:\test
     9 
    10     SHFileOperation(&fop);
    11 }

    需要注意一点是,我在验证的时候发现拷贝失效了,经过排查,发现传入的参数有问题,因为我用的是char*,因此多了一层转换,转换出问题了(字符串显示没问题)。现将正确的TCHAR和char*互转代码贴出来

     1 string TCHAR2char( const TCHAR* STR)
     2 {
     3     string strchar;
     4     if (!*STR)
     5     {
     6         return strchar;
     7     }
     8     
     9     //返回字符串的长度
    10     int size = WideCharToMultiByte(CP_ACP, 0, STR, -1, NULL, 0, NULL, FALSE);
    11 
    12     //申请一个多字节的字符串变量
    13     char* str = new char[size + 1];
    14 
    15     //将STR转成str
    16     WideCharToMultiByte(CP_ACP, 0, STR, -1, str, size, NULL, FALSE);
    17     str[size] = '';
    18     strchar = str;
    19     delete (str);
    20 
    21     return strchar;
    22 }
    1 TCHAR* char2TCAHR(const char* str)
    2 {
    3     int size = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
    4     TCHAR* retStr = new TCHAR[size + 1];
    5     MultiByteToWideChar(CP_ACP, 0, str, -1, retStr, size);
    6     retStr[size] = '';
    7     return retStr;
    8 }
    作者:快雪
    本文版权归作者所有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    RabbitMQ
    连接池,为什么要使用连接池?
    mac 安装arcanist
    感触
    UDP socket
    Servlet过滤器
    PL、SQL
    springmvc 文件上传实现(不是服务器的)
    注解spring
    excel工具类
  • 原文地址:https://www.cnblogs.com/kuaixue/p/12762974.html
Copyright © 2011-2022 走看看