SHFileOperation的使用问题

hsbraver 2008-01-22 11:56:33
SHFILEOPSTRUCT lpfile;
memset(&lpfile,0,sizeof(LPSHFILEOPSTRUCT));

strMotoFileName = "D:\\motoFont\\test.ttc";
strSakiFileName = "D:\\Share\\Font\\test.ttc";

lpfile.hwnd = this->Handle;
lpfile.wFunc =FO_COPY;
lpfile.fFlags=FOF_FILESONLY | FOF_MULTIDESTFILES | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR;
lpfile.pFrom =strMotoFileName.c_str();
lpfile.pTo =strSakiFileName.c_str();
lpfile.fAnyOperationsAborted=true;

SHFileOperation(&lpfile);

以上代码,运行到SHFileOperation(&lpfile)时.报错("文件不能COPY,COPY的源文件或目录不能读取").
我再次检查了一下D:\\motoFont是存在的,也有test.ttc文件.D:\\Share\\Font也是存在的.为什么呢?奇怪.

其实这个程序原来是这样的:
strMotoFileName = "D:\\motoFont\\test.ttc";
strSakiFileName = "\\\\shareMachine\\Share\\Font\\test.ttc";
即要将本地的文件COPY到另一台机器上的共享目录中去.(对了,为了测试这里的shareMachine就是自己的机器名)
可是却报错"不能写目标目录,没有访问权限."之类的信息.


所以就试着用本地COPY到本地的方式,结果又有了上面的问题....无语.

是否有同仁遇到了相同的问题呢?望大虾指教...(我的代码有问题吗?)
...全文
264 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
cczlp 2008-01-22
  • 打赏
  • 举报
回复
lpfile.pFrom =strMotoFileName.c_str();
lpfile.pTo =strSakiFileName.c_str();
===============================================
不能这样用. 必须是以 \0\0结尾的字符串.

SHFILEOPSTRUCT lpfile;
memset(&lpfile,0,sizeof(LPSHFILEOPSTRUCT));

strMotoFileName = "D:\\motoFont\\test.ttc";
strSakiFileName = "D:\\Share\\Font\\test.ttc";
char src[260], dst[260];
memset(src, 0, 260);
memset(dst, 0, 260);
strcpy(src, strMotoFileName.c_str());
strcpy(dst, strSakiFileName.c_str());
lpfile.hwnd = this-> Handle;
lpfile.wFunc =FO_COPY;
lpfile.fFlags=FOF_FILESONLY ¦ FOF_MULTIDESTFILES ¦ FOF_NOCONFIRMATION ¦ FOF_NOCONFIRMMKDIR;
lpfile.pFrom =src;
lpfile.pTo =dst;
lpfile.fAnyOperationsAborted=true;

SHFileOperation(&lpfile);
Waiting4you 2008-01-22
  • 打赏
  • 举报
回复
lpfile.pFrom和lpfile.pTo指向的字符串后面要有两个0;
像这样:
lpfile.pFrom = "D:\\motoFont\\test.ttc\0";
lpfile.pTo = "D:\\Share\\Font\\test.ttc\0";
hsbraver 2008-01-22
  • 打赏
  • 举报
回复
这贴子,到这吧.

谢谢!
cczlp 2008-01-22
  • 打赏
  • 举报
回复
只读?
hsbraver 2008-01-22
  • 打赏
  • 举报
回复
终于成功了,不过什么都没改,只是将目标机换成了真的远程机机器名...

成功的拷入了...

但改回来后,还是不能拷到自己的本地的共享目录中.还是报老错误,真奇怪.



hsbraver 2008-01-22
  • 打赏
  • 举报
回复
晕,我把源和目的换一下却可以.
即:
strMotoFileName = "\\\\shareMachine\\Font\\font.ttc";
strSakiFileName = "D:\\motoFont\\font.ttc";

换回来后又挂了...WHY??
cczlp 2008-01-22
  • 打赏
  • 举报
回复
在文件夹点右键, 选共享和安全,然后就看着办
hsbraver 2008-01-22
  • 打赏
  • 举报
回复
哦,就是"访问权限"那将"Everyone"中的许可设到最高吧?
hsbraver 2008-01-22
  • 打赏
  • 举报
回复
问个小白问题.

我是WINXP系统,怎么设共享目录才算是"完全共享"目录呢?
cczlp 2008-01-22
  • 打赏
  • 举报
回复
我在自己机器里设一个完全共享目录.没有用户名和密码.

strMotoFileName = "c:\\a.txt";
strSakiFileName = "\\\\tianya\\aa\\font.ttc";

aa是共享目录,tianya是我的机器名, 其它代码相同.
hsbraver 2008-01-22
  • 打赏
  • 举报
回复
不惑,你能贴一下你这部分代码吗?我对比一下看.
hsbraver 2008-01-22
  • 打赏
  • 举报
回复
COPY到你的共享目录里了??
代码和我的一样??

也是用我同样的方法,用自己的机子作远程机吗?你的机器有用户名和密码吗?

cczlp 2008-01-22
  • 打赏
  • 举报
回复
我测试没有问题...
hsbraver 2008-01-22
  • 打赏
  • 举报
回复
我现在把\\\\shareMachine\\Share\\Font所有权限都打开了.还是一样...
hsbraver 2008-01-22
  • 打赏
  • 举报
回复
谢谢,毛毛和不惑.
本地到本地搞定了.

可是现在
SHFILEOPSTRUCT lpfile;
memset(&lpfile,0,sizeof(LPSHFILEOPSTRUCT));

strMotoFileName = "D:\\motoFont\\font.ttc";
strSakiFileName = "\\\\shareMachine\\Share\\Font\\font.ttc";
char src[260], dst[260];
memset(src, 0, 260);
memset(dst, 0, 260);
strcpy(src, strMotoFileName.c_str());
strcpy(dst, strSakiFileName.c_str());
lpfile.hwnd = this-> Handle;
lpfile.wFunc = FO_COPY;
lpfile.fFlags= FOF_FILESONLY ¦ FOF_MULTIDESTFILES ¦ FOF_NOCONFIRMATION ¦ FOF_NOCONFIRMMKDIR;
lpfile.pFrom = src;
lpfile.pTo = dst;
lpfile.fAnyOperationsAborted=true;

SHFileOperation(&lpfile);
还是会报错,内容是"font(奇怪文件扩展名没了)不能COPY,不能访问.磁盘满了吗写入禁止了吗或者文件正在使用中?请确认.",这样一个错误.可是这些问题都不存在.

为了测试方便,以上的shareMachine名就是自己本机的机器名,这里是不是有权限问题呢?
另外,如果对方的机器有用户名和密码的话又该怎么做呢?

请指教:-)

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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