我要复制一个文件夹,该文件夹下还有子文件夹和文件,我要用SHFileOperation和SHFILEOPSTRUCT,该怎么用?
CString from=...;
CString to=...;
//在程序里from 和to已经赋值了的,这里就不给出了
SHFILEOPSTRUCT sfo;
sfo.hwnd=NULL;
sfo.wFunc=FO_COPY;
sfo.pFrom=from;
sfo.pTo=to;
fo.fFlags=FOF_SILENT|FOF_NOCONFIRMATION|FOF_NOCONFIRMMKDIR;
sfo.fAnyOperationsAborted=false;
SHFileOperation(&sfo);
上面这段代码编译没错,运行时不会出现错误,但是没结果,就像没有运行一样,请问我应该如何修改?

解决方案 »

  1.   

    http://www.codeproject.com/shell/SHFileOperation_Demo.asp
      

  2.   

    pFrom is a string pointer of the source paths separated by '\0' and terminated by '\0\0'.pTo is a string pointer of the destination paths separated by '\0' and terminated by '\0\0'.这个'\0' 和'\0\0'是什么意思?里面英文半懂半懂的,不是很明确里面的意思,能否解释一下
      

  3.   

    pForm可以指定多个字符串,每一个字符串都以\0结束,最后一个字符串以\0\0结束
      

  4.   

    我的情况是要复制一个文件夹,比如f:\lq,且lq文件夹下还有文件夹和文件,如果我要将lq文件夹复制到f:\lq1,那么我这么写LPCSTR szFrom;
    LPCSTR szTo;szFrom="f:\lq";//要不要这么写"f:\lq\0\0"?
    szTo="f:\lq1";SHFILEOPSTRUCT sfo;
    ZeroMemory(&sfo, sizeof(SHFILEOPSTRUCT));
    sfo.hwnd=NULL;
    sfo.wFunc=FO_COPY;
    sfo.pFrom=szFrom;
    sfo.pTo=szTo;
    sfo.fFlags=FOF_SILENT|FOF_NOCONFIRMATION|FOF_NOCONFIRMMKDIR;
    //sfo.fFlags=FOF_MULTIDESTFILES|FOF_NOCONFIRMMKDIR|FOF_NOCONFIRMATION;//如果用这条语句的话程序运行时会有磁盘无法读的错误,程序将中止.
    sfo.fAnyOperationsAborted=true;
    SHFileOperation(&sfo);上面这段代码运行后并没有复制文件夹.要不要复制前先创建好文件夹lq1,先这么做好像也没有用,我试过了.
    高手能解答一下啊,急!
      

  5.   

    szFrom="f:\\lq\0";
    szTo="f:\\lq1\0";
    试试.....................
      

  6.   

    我知道是什么原因了,是这两条语句没有得到正确的路径,sfo.pFrom=szFrom;sfo.pTo=szTo;
    我直接这样写
    sfo.pFrom="f:\\lq\0";
    sfo.pTo="f:\\lq1\0";
    就没问题了,也就是说
    sfo.pFrom=szFrom;
    sfo.pTo=szTo;
    这里有问题了那么再往上就应该是
    LPCSTR szFrom;
    LPCSTR szTo;szFrom="f:\lq";//要不要这么写"f:\lq\0\0"?
    szTo="f:\lq1";
    的问题了,szFrom 和szTo是不是要定义为char*类型呢?
      

  7.   

    VISUAL STUDIO 2005 有些不同,我测试过,下面是这样实现的:         wchar_t * szSourcePath = _T("J:\\testFrom\\*.*\0");
    wchar_t * szDestinationPath = _T("J:\\testTo\\\0"); SHFILEOPSTRUCT FileOP; //SHFILEOPSTRUCT声明
    ZeroMemory(&FileOP, sizeof(FileOP));  //SHFILEOPSTRUCT成员赋值
    FileOP.hwnd = AfxGetApp()->m_pMainWnd->m_hWnd;
    FileOP.fFlags = FOF_SILENT;
    FileOP.wFunc = FO_COPY;
    FileOP.pFrom = szSourcePath;
    FileOP.pTo = szDestinationPath;
    FileOP.fAnyOperationsAborted = FALSE; //
    FileOP.hNameMappings = NULL;
    FileOP.lpszProgressTitle = NULL;
    //SHFILEOPSTRUCT成员赋值结束 int msg = SHFileOperation(&FileOP);//执行复制操作 if(msg==0)
      AfxMessageBox(_T("复制完成"));    else
    AfxMessageBox(_T("复制失败!!!"));