代码如下:
          SHFILEOPSTRUCT  sfo;  
          sfo.hwnd  =  NULL;  
          sfo.wFunc  =  FO_MOVE;  
          sfo.pFrom  =  "c:\\My_Docs2\\0";  
          sfo.pTo  =  "d:\\My_Docs2\\1";  
          sfo.fFlags  =  FOF_SILENT  |  FOF_NOCONFIRMATION  |  FOF_NOCONFIRMMKDIR;  
    
          int hr  =  SHFileOperation(&sfo);  
  
照这么写我可以把文件夹"c:\\My_Docs2\\0移动到d:\\My_Docs2\\1";  
那我想文件夹"c:\\My_Docs2\\0复制移动到d:\\My_Docs2\\1";  。该怎么做?保留原来的

解决方案 »

  1.   

    sfo.wFunc  =  FO_COPY;
      

  2.   

    头疼。你顾名思义一下,也可以猜出要将FO_MOVE改成FO_COPY试试啊。
      

  3.   

    我代码这么写了:
     
        TCHAR szFullPath[MAX_PATH]; 
        GetModuleFileName(NULL,szFullPath,MAX_PATH); 
        TCHAR* pszModuleFileName = _tcsrchr(szFullPath, _T('\\')); 
        pszModuleFileName[0]=_T('\0'); 
        SetCurrentDirectory(szFullPath); 
        CString CurrentDir(szFullPath); 
        CurrentDir.Replace("\\",   "\\\\"); //获得程序地址

        CString s1,s2;
        s1=CurrentDir+"\\\\A";
        s2=CurrentDir+"\\\\B\\\\data";
       
    SHFILEOPSTRUCT  sfo;  
        sfo.hwnd  =  NULL;  
        sfo.wFunc  =  FO_COPY;  
        sfo.pFrom  =  s1;  

        sfo.pTo  =  s2;  
        sfo.fFlags  =  FOF_SILENT  |  FOF_NOCONFIRMATION  |  FOF_NOCONFIRMMKDIR;      
        int hr  =  SHFileOperation(&sfo);  
    把A文件夹复制移动到B文件夹更名为data。为啥不行了。我的s1,s2有什么问题吗?
      

  4.   

    TCHAR* pszModuleFileName = _tcsrchr(szFullPath, _T('\\')); 
        pszModuleFileName[0]=_T('\0'); 
    这是什么意思???为什么第0个写成终止符???
      

  5.   

    我加了AfxMessageBox(s1);看了一下s1=E:\\xin\\A  没有问题啊
      

  6.   

    s1=E:\\xin\\A 
    怎么那么多斜杠???s1=E:\xin\A 才是正确的结果。
      

  7.   

    CurrentDir.Replace("\\",  "\\\\"); //获得程序地址
    这个事你自己加的吧?去掉。
    s1=CurrentDir+"\\\\A"; 
        s2=CurrentDir+"\\\\B\\\\data"; 
    这里不需要这么多\,保留一半。
      

  8.   

    去掉也不行。
    我加这么多是因为原来直接写地址的时候,E:\xin\A没反应变成这样E:\\xin\\A就可以
      

  9.   

    对啊。直接写当然是需要E:\\xin\\A了。你还不知道\\是干啥用的。
      

  10.   

    你看一下szFullPath,是否以\结尾的。
      

  11.   

      sfo.pFrom  =  s1;  
      sfo.pTo  =  s2;  
    s1 和s2 应该转化成char * 类型的           CString FileName="";
    char FileName[100]="\0";
    memcpy(FileName,s1,s1.GetLength());
      

  12.   

     sfo.pFrom  =  "c:\\My_Docs2\\0";  
     sfo.pTo  =  "d:\\My_Docs2\\1";  
    感觉这个 都有点问题.
    貌似这个赋值后面还要加\0
     sfo.pFrom  =  "c:\\My_Docs2\\0\0";  
     sfo.pTo  =  "d:\\My_Docs2\\1\0";  
      

  13.   

    我现在代码这样:
    TCHAR szFullPath[MAX_PATH]; 
        GetModuleFileName(NULL,szFullPath,MAX_PATH); 
        TCHAR* pszModuleFileName = _tcsrchr(szFullPath, _T('\\')); 
        pszModuleFileName[0]=_T('\0'); 
        SetCurrentDirectory(szFullPath); 
        CString CurrentDir(szFullPath); 


        CString s1,s2;
        s1=CurrentDir+"\\A";
        s2=CurrentDir+"\\B\\data";
       
    SHFILEOPSTRUCT  sfo;  
        sfo.hwnd  =  NULL;  
        sfo.wFunc  =  FO_COPY;  
        sfo.pFrom  =  s1;  

        sfo.pTo  =  s2;  
        sfo.fFlags  =  FOF_SILENT  |  FOF_NOCONFIRMATION  |  FOF_NOCONFIRMMKDIR;      
        int hr  =  SHFileOperation(&sfo);  
    不行
      

  14.   

    你现在就是想把"c:\\My_Docs2\\0复制到d:\\My_Docs2\\1"是吧?
      

  15.   

    SHFILEOPSTRUCT FileInfo;
    FileInfo.hwnd=this->m_hWnd;
    FileInfo.wFunc=FO_COPY;
    FileInfo.pFrom=L"C:\\My_Docs2\\0";
    FileInfo.pTo=L"D:\\My_Docs2\\1";
    FileInfo.fAnyOperationsAborted= true;   //可以被打断
    FileInfo.fFlags=FOF_SIMPLEPROGRESS;
        FileInfo.lpszProgressTitle=L"复制文件"; 
    int ret=SHFileOperation(&FileInfo);
      

  16.   

     这挺奇怪的,我觉得是不是数据类型的问题啊,我代码这么些不对:
        
        CString s1,s2;
    s1="D:\\8\\1";
    s2="D:\\8\\2";
         
      
        SHFILEOPSTRUCT  sfo;  
        sfo.hwnd  =  NULL;  
        sfo.wFunc  =  FO_COPY;  
        sfo.pFrom  =s1;       sfo.pTo  = s2; 
        sfo.fFlags  =  FOF_SILENT  |  FOF_NOCONFIRMATION  |  FOF_NOCONFIRMMKDIR;      
        int hr  =  SHFileOperation(&sfo); 
    没反应。可我要这么些就可以。
        SHFILEOPSTRUCT  sfo;  
        sfo.hwnd  =  NULL;  
        sfo.wFunc  =  FO_COPY;  
        sfo.pFrom  =="D:\\8\\1";       sfo.pTo  = "D:\\8\\2";    
    sfo.fFlags  =  FOF_SILENT  |  FOF_NOCONFIRMATION  |  FOF_NOCONFIRMMKDIR;      
        int hr  =  SHFileOperation(&sfo); 
      

  17.   

    我这两个是不定的"C:\\My_Docs2\\0";"D:\\My_Docs2\\1";不能直接写的,要加上这个 CurrentDir
      

  18.   

    我将类型转化了也不对:
    TCHAR szFullPath[MAX_PATH]; 
        GetModuleFileName(NULL,szFullPath,MAX_PATH); 
        TCHAR* pszModuleFileName = _tcsrchr(szFullPath, _T('\\')); 
        pszModuleFileName[0]=_T('\0'); 
        SetCurrentDirectory(szFullPath); 
        CString CurrentDir(szFullPath); 


        CString s1,s2;
        s1=CurrentDir+"\\A";
        s2=CurrentDir+"\\B\\data";
       LPCTSTR   p1=s1;
       LPCTSTR   p2=s2;
      SHFILEOPSTRUCT  sfo;  
        sfo.hwnd  =  NULL;  
        sfo.wFunc  =  FO_COPY;  
        sfo.pFrom  =  p1;  

        sfo.pTo  = p2;  
        sfo.fFlags  =  FOF_SILENT  |  FOF_NOCONFIRMATION  |  FOF_NOCONFIRMMKDIR;      
        int hr  =  SHFileOperation(&sfo);  
      

  19.   

    你看看你的字符集用的是什么,unicode还是多字节,另外你的TCHAR szFullPath[MAX_PATH]; 最好初始化为{0};