在Visual Studio 2012 下的代码:
void CCopyShowDlg::OnBnClickedCopyshowbtn()
{
//源文件
char charSrc[] = "D:\\baidu player\\ReadMe.txt";
//目标文件
char charDst[] = "D:\\ReadMe.txt";
SHFILEOPSTRUCT lpFile;
lpFile.hwnd = this->m_hWnd;
lpFile.wFunc = FO_COPY;
lpFile.pFrom = (PCZZWSTR)charSrc;
lpFile.pTo = (PCZZWSTR)charDst;
lpFile.fFlags = FOF_ALLOWUNDO;
lpFile.fAnyOperationsAborted = FALSE;
lpFile.hNameMappings = NULL;
lpFile.lpszProgressTitle = (PCWSTR)"复制文件";
int returnValue = SHFileOperationW(&lpFile);
if(returnValue == 0)
{
if(lpFile.fAnyOperationsAborted == TRUE)
{
MessageBox(L"复制文件的操作被取消.",L"提示",MB_OK);
}
else
{
MessageBox(L"复制文件操作成功.",L"提示",MB_OK);
}
}
else
{
MessageBox(L"复制文件操作失败.",L"提示",MB_OK);
}
}
lpFile.pFrom = (PCZZWSTR)charSrc;
lpFile.pFrom = charSrc;
@米书: char charSrc[] = "D:\\baidu player\\ReadMe.txt";
wchar_t charSrc[] = L"D:\\baidu player\\ReadMe.txt";
试过了,复制文件失败!
@米书:
SHFILEOPSTRUCTW lpFile; lpFile.hwnd = NULL; lpFile.wFunc = FO_COPY; lpFile.pFrom = L"D:\\baidu player\\ReadMe.txt"; lpFile.pTo = L"D:\\ReadMe.txt"; lpFile.fFlags = FOF_ALLOWUNDO; lpFile.fAnyOperationsAborted = FALSE; lpFile.hNameMappings = NULL; lpFile.lpszProgressTitle = L"复制文件";
int returnValue = SHFileOperationW(&lpFile);
我测试了下,没有问题,注意我给你提示的两处修改,都是涉及到字符集的,你要么都是用UNICODE,要么都是用 MCBS,还要,不要在 char 和 wchar_t 之间乱用强制转换,例如:(PCWSTR)"复制文件";
你可以把 int returnValue = SHFileOperationW(&lpFile); 的结果贴出来,同时打印出 GetLastError。
@Launcher: 受教了,测试成功了
@Launcher: MCBS是什么,我在网上怎么找不到答案啊
@米书: 写错了,应该是:MBCS。