SHFILEOPSTRUCT之惑

来源:互联网 发布:java引用和指针的区别 编辑:程序博客网 时间:2024/05/17 06:42

MSDN关于SHFILEOPSTRUCT的定义为:

 

typedef struct _SHFILEOPSTRUCT {
  HWND         hwnd;
  UINT         wFunc;
  LPCTSTR      pFrom;
  LPCTSTR      pTo;
  FILEOP_FLAGS fFlags;
  BOOL         fAnyOperationsAborted;
  LPVOID       hNameMappings;
  LPCTSTR      lpszProgressTitle;
} SHFILEOPSTRUCT, *LPSHFILEOPSTRUCT

 

问题出在pFrom上。

用以下代码可以得到运行文件所在目录

 CHAR exePath[MAX_PATH];
   memset(exePath,0,MAX_PATH);
   GetModuleFileName(NULL,exePath,MAX_PATH);//得到程序模块名称,全路径

   CHAR slash = '//';

   for (int i =  MAX_PATH - 1; i >= 0; i--)
   {
    if (exePath[i] == slash)
    {
     exePath[i] = '/0';
     break;
    }
}

 

然后,如果将exePath转换为CString:

CString str = exePath;

 

然后再SHFILEOPSTRUCT->pFrom = str.GetBuffer()就不对了。

虽然字符串是一模一样的。

 

最后通过

 

   CHAR sFrom1[MAX_PATH];
   memset(sFrom1,0,MAX_PATH);
   strcpy(sFrom1,exePath);
   strcat(sFrom1,"//report.xsl");

 

直接在字符串层面操作,运行正确。

不知道是什么原因~~