请教拷贝文件夹中涉及到的字符串格式问题!在线等……

andyxgr 2004-01-08 07:16:55
编写了一个应用程序,功能是将应用程序所在的当前目录中的“source”文件夹拷贝到指定的目录下,具体的函数调用关系如下:
{
char sourcePath[MAX_PATH];
CString destPath;

pDialog3->m_FileListCtl.GetWindowText(destPath);
//pDialog3->m_FileListCtl是一个无模式对话框的组合框控件

GetCurrentDirectory(MAX_PATH,sourcePath); //获得当前目录

strcat(sourcePath,"\\source"); //指到source文件夹
CString sourPath;
sourPath.Format(_T("%s"),sourcePath); //字符格式转换

::CopyDirectory(m_hWnd,sourPath,destPath); //拷贝文件夹操作函数
}
此时,我在这儿设置断点后,发现sourPath的路径是:“f:\source”,与我的要求相吻合,但是拷贝时提示“拷贝文件错误”,而我将之改成
::CopyDirectory(m_hWnd,“f:\\source”,destPath)时,文件就能够拷贝了,到底是怎么回事呢?

CopyDirectory函数如下:
int CopyDirectory(HWND Handle,LPCTSTR PathOut,LPCTSTR PathIn)
{
SHFILEOPSTRUCT op;
ZeroMemory(&op, sizeof(op));
op.hwnd = Handle; //HWND_DESKTOP;
op.wFunc = FO_COPY;
op.pFrom = PathOut;
op.pTo = PathIn;
op.fFlags = FOF_SIMPLEPROGRESS|FOF_FILESONLY
|FOF_RENAMEONCOLLISION|FOF_WANTMAPPINGHANDLE;

int Re = SHFileOperation(&op);
return Re;
}



...全文
45 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
danshuihepan 2004-01-10
  • 打赏
  • 举报
回复
to andyxgr(一休哥):
可以肯定,你的sourPath路径是没问题的。你可以在调用函数时写成:
::CopyDirectory(m_hWnd,destPath,sourPath); //将源和目的路径反过来写。
来验证。
但写成你所要的情况时却确实有问题,我调试了一个多小时,失败了,哎,换一种方法看看。
andyxgr 2004-01-09
  • 打赏
  • 举报
回复
To l_b_q() :
不好意思,上面有个地方不对!
还是不行啊,我不知道你怎么改的?你说把sourPath定义成LPCSTR是可以,
是如我下面改的吗?

GetCurrentDirectory(MAX_PATH,sourcePath); //获得当前目录

strcat(sourcePath,"\\source"); //指到source文件夹
LPCTSTR sourPath = (LPCTSTR )sourcePath; //字符格式转换

::CopyDirectory(m_hWnd,sourPath,destPath); //拷贝文件夹操作函数
andyxgr 2004-01-09
  • 打赏
  • 举报
回复
To l_b_q() :
还是不行啊,我不知道你怎么改的?你说把sourPath定义成LPCSTR是可以,
是如我下面改的吗?

GetCurrentDirectory(MAX_PATH,sourcePath); //获得当前目录

strcat(sourcePath,"\\debug\\c\0"); //指到source文件夹
LPCTSTR sourPath = (LPCTSTR )sourcePath; //字符格式转换

::CopyDirectory(m_hWnd,sourPath,destPath); //拷贝文件夹操作函数
}
l_b_q 2004-01-08
  • 打赏
  • 举报
回复
错了,是LPCTSTR

或者定义成LPTSTR更实际一些
l_b_q 2004-01-08
  • 打赏
  • 举报
回复
我试了一下,把sourPath定义成LPCSTR是可以的,不知道是什么原因

另外,VC中_T好象只是个占位符吧

#define _T(x) __T(x)
#define __T(x) x
andyxgr 2004-01-08
  • 打赏
  • 举报
回复
不是乱码,我看了后面没有那些东西,
显示的就是:“f:\source”,
请各位再给点意见!呵呵
vmaster 2004-01-08
  • 打赏
  • 举报
回复
我上面说的“¥¥¥¥¥¥;”是指乱码,这里显示不出来
vmaster 2004-01-08
  • 打赏
  • 举报
回复
我想问题可能是出在这里:char sourcePath[MAX_PATH];
sourcePath的长度大于实际得到路径的字符所占的长度,所以后面几位是乱码。
你设置断点后,sourPath的路径是:“f:\source”呢,还是“f:\source¥¥¥¥¥¥"呢?
不知道说错了没,请各位指教:)
eastred 2004-01-08
  • 打赏
  • 举报
回复
是应该这么写。
这里的f:\\source表示的就是f:\source。
“\\”才是“\”。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧