SHFILEOPSTRUCT fo;
char str1[1024],str2[1024];memset(str1,0,sizeof(str1));
memset(str2,0,sizeof(str2));sprintf(str1,"c:\\%s\\update",temp);
sprintf(str2,"d:\\%s\\",temp);memset(&fo, 0, sizeof(fo));
fo.wFunc = FO_COPY;
fo.pFrom = (LPCSTR)str1;                //这里如果换成"c:\\abc\\update"就没有问题
fo.pTo = (LPCSTR)str2;fo.fFlags = FOF_NOCOMFIRMATION;
SHFileOperation(&fo);为什么总是提示“无法读取文件或磁盘”,直接赋值就可以?

解决方案 »

  1.   

    刚才写漏了,
    sprintf(str1,"c:\\%s\\update",temp);
    sprintf(str2,"d:\\%s\\",temp);
    应为:
    sprintf(str1,"c:\\%s\\update\0\0",temp);
    sprintf(str2,"d:\\%s\\\0\0",temp);为什么读不了文件呢?
      

  2.   

    我的代码,供参考。 SHFILEOPSTRUCT  FileOp;
    ZeroMemory(&FileOp,sizeof(FileOp));

    char bufferFrom[MAX_PATH] = {0};
    char bufferTo[MAX_PATH] = {0};

    int nFrom = strFrom.GetLength();
    int nTo = strTo.GetLength();

    memcpy(bufferFrom,strFrom.GetBuffer(nFrom),nFrom);
    memcpy(bufferTo,strTo.GetBuffer(nTo),nTo);

    FileOp.hwnd = NULL;
    FileOp.wFunc = FO_COPY;
    FileOp.pTo = bufferTo;
    FileOp.pFrom = bufferFrom;

    FileOp.fFlags = FOF_NOCONFIRMMKDIR | FOF_NOCONFIRMATION; 

    if ( 0 == SHFileOperation( &FileOp ) )
    {
    bRetValue = TRUE;
    }
      

  3.   

    1 那个结构中需要的是Unicode的字符串类型,所以你要如下操作:SHFILEOPSTRUCT fo;
    TCHAR str1[1024] = {0};
    TCHAR str2[1024] = {0};_stprintf(str1, _T("c:\\%s\\update"), temp);
    _stprintf(str2, _T("d:\\%s\\"), temp);memset(&fo, 0, sizeof(fo));
    fo.wFunc = FO_COPY;
    fo.pFrom = str1;
    fo.pTo   = str2;fo.fFlags = FOF_NOCOMFIRMATION;
    SHFileOperation(&fo);为什么总是提示“无法读取文件或磁盘”,直接赋值就可以?
      

  4.   

    fo.pFrom支持多个字符串,之间用'\0'分隔,最后结束时用'\0\0'结束
    例如:fo.pFrom="d:\\a\0d:\\b\0\0"