首页 新闻 会员 周边

使用SHFileOperation()函数怎么不能完成复制操作

0
[已解决问题] 解决于 2013-08-19 11:04

在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);
}
}

唯有-努力的主页 唯有-努力 | 初学一级 | 园豆:136
提问于:2013-08-19 09:17
< >
分享
最佳答案
1

lpFile.pFrom = (PCZZWSTR)charSrc;

 

lpFile.pFrom = charSrc;

奖励园豆:5
Launcher | 高人七级 |园豆:45045 | 2013-08-19 09:30

 

唯有-努力 | 园豆:136 (初学一级) | 2013-08-19 09:38

@米书: char charSrc[] = "D:\\baidu player\\ReadMe.txt";

wchar_t charSrc[] = L"D:\\baidu player\\ReadMe.txt";

Launcher | 园豆:45045 (高人七级) | 2013-08-19 09:43

试过了,复制文件失败!

唯有-努力 | 园豆:136 (初学一级) | 2013-08-19 09:52

@米书: 

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 | 园豆:45045 (高人七级) | 2013-08-19 10:12

@Launcher: 受教了,测试成功了

唯有-努力 | 园豆:136 (初学一级) | 2013-08-19 11:03

@Launcher: MCBS是什么,我在网上怎么找不到答案啊

唯有-努力 | 园豆:136 (初学一级) | 2013-08-19 11:07

@米书: 写错了,应该是:MBCS。

Launcher | 园豆:45045 (高人七级) | 2013-08-19 11:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册