请教该怎么往网络共享文件夹里拷贝文件?

彭家老三 2012-05-06 10:03:19
那个共享文件夹有两组用户名和密码,第一组只有只读权限,用这组用户名和密码打开网络文件夹是不能更改文件夹里的东西的,平时我们用的都是第一组.第二组用户名和密码是有可写的权限的,我想在程序内部使用第二组用户名和密码实现文件拷贝,但又不想在电脑上保存用户名和密码,请问有没有什么比较好的方法?谢谢!
...全文
417 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
彭家老三 2012-05-07
  • 打赏
  • 举报
回复
刚刚按照您的建议改成

NETRESOURCE netres;
memset(&netres, 0, sizeof(NETRESOURCE));
netres.dwScope=RESOURCE_CONNECTED;
netres.dwType=RESOURCETYPE_ANY;
netres.dwDisplayType=RESOURCEDISPLAYTYPE_GENERIC;
netres.dwUsage=RESOURCEUSAGE_CONNECTABLE;
netres.lpLocalName = "";
netres.lpProvider = "";

netres.lpRemoteName="\\\\172.26.170.21\\IPC$";//\\\\172.26.170.21改为 \\\\172.26.170.21\\IPC$

DWORD result=WNetCancelConnection2("\\\\172.26.170.21\\IPC$",0,true);//\\\\172.26.170.21改为 \\\\172.26.170.21\\IPC$
//ShowMessage(result);

DWORD d=WNetAddConnection2(&netres, "B-QBUS\\user", "passwords",CONNECT_UPDATE_PROFILE);

但是WNetAddConnection2的返回值依然是1326,域名B-QBUS加不加都会返回1326
CCED136 2012-05-07
  • 打赏
  • 举报
回复
你刚才报的错误中, 2250 就是因为连接名称不正确

其他两个返回值,是已经建立了只读连接, 这个错误无所谓, 反正每次你开启可写连接前, 先用 WNetCancelConnection2 断一次连接即可.
CCED136 2012-05-07
  • 打赏
  • 举报
回复
不对哦, 一般, WIN32 应该连接 "\\\\172.26.170.21\\IPC$" 这个连接。

连接成功后, 就能直接访问 "\\\\172.26.170.21\\共享目录" 了
彭家老三 2012-05-07
  • 打赏
  • 举报
回复
感谢CCED136的帮忙,但我现在有个问题:
我用如下的代码做断开连接和添加连接:

NETRESOURCE netres;
memset(&netres, 0, sizeof(NETRESOURCE));
netres.dwScope=RESOURCE_CONNECTED;
netres.dwType=RESOURCETYPE_ANY;
netres.dwDisplayType=RESOURCEDISPLAYTYPE_GENERIC;
netres.dwUsage=RESOURCEUSAGE_CONNECTABLE;
netres.lpLocalName = "";
netres.lpProvider = "";

netres.lpRemoteName="\\\\172.26.170.21";

DWORD result=WNetCancelConnection2("\\\\172.26.170.21",0,true);
//ShowMessage(result);

DWORD d=WNetAddConnection2(&netres, "B-QBUS\\user", "passwords",CONNECT_UPDATE_PROFILE);

但WNetCancelConnection2函数的返回值总是2250,我看了下说明是This network connection does not exist.
而WNetAddConnection2的返回值则要不是1219(不能用多个用户名密码建立连接)要不就是1326(错误的用户名和密码),那个用户名B-QBUS\\user中B-QBUS是域名,我把域名去掉,也是一样返回1326.
不知道这是怎么回事,请您帮忙看看.
彭家老三 2012-05-07
  • 打赏
  • 举报
回复
我昨天一整天都在弄这个东西,结果却因为这种错误搞不定,之前有次加班到夜里12点多找错误,最后发现是因为一个前辈把命令的返回值OK写成了PASS.
真的非常感激.
[Quote=引用 12 楼 的回复:]
呵呵, 搞定就好
[/Quote]
CCED136 2012-05-07
  • 打赏
  • 举报
回复
呵呵, 搞定就好
彭家老三 2012-05-07
  • 打赏
  • 举报
回复

谢谢您,现在可以了,很羞愧我的粗心,很敬佩您的耐心.
[Quote=引用 10 楼 的回复:]

另外,大哥, 你不是耍我吧。 函数原型:
DWORD WNetAddConnection2(
LPNETRESOURCE lpNetResource, // connection details
LPCTSTR lpPassword, // password
LPCTSTR lpUsername, // user name
DW……
[/Quote]
CCED136 2012-05-07
  • 打赏
  • 举报
回复
另外,大哥, 你不是耍我吧。 函数原型:
DWORD WNetAddConnection2(
LPNETRESOURCE lpNetResource, // connection details
LPCTSTR lpPassword, // password
LPCTSTR lpUsername, // user name
DWORD dwFlags // connection options
);


第二个参数,是口令, 第三个参数才是 用户名称啊
彭家老三 2012-05-07
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

现在没有报 2250 错误了吧。 用户名称和口令确定对么?
[/Quote]
嗯,是的,2250没有错误了,用户名和口令确定是对的,我用了两组用户名和口令都试过.用户名加域名和不加域名也都试过.谢谢您的帮忙.
CCED136 2012-05-07
  • 打赏
  • 举报
回复
现在没有报 2250 错误了吧。 用户名称和口令确定对么?
CCED136 2012-05-06
  • 打赏
  • 举报
回复
我也补充一下: 程序中利用 WNetAddConnection2 建立可写连接后, 完成需要的功能,注意在程序退出时,应该把这个具有可写权限的连接断开。 否则, 运行这个程序的计算机可以直接使用 网上邻居读写目标目录。这是因为 WINDOWS 自动保持了刚才的可写连接。

另外,按照顶楼的需求,实际上程序在退出时,应该首先断开可写权限的连接, 然后重新用 WNetAddConnection2 函数建立一个只读权限的连接, 这样一来,程序退出后,用户可以直接用网上邻居读目标目录, 而不用再次手工输入用户名称和口令登录共享目录。
CCED136 2012-05-06
  • 打赏
  • 举报
回复
编程实现这个功能,应该还是很简单的。首先,利用 WNetAddConnection2 函数建立到共享文件夹的连接, 这里面输入 具有写权限的用户名称和口令, 一旦连接建立后, 就可以读写了。

读写完成后, 用配对的指令,断开共享连接即可
彭家老三 2012-05-06
  • 打赏
  • 举报
回复
补充一下:如果使用CopyFile("c:\\111.txt","\\\\192.168.0.202\\gxrj\\111.txt",true);语句,前提是计算机里保存了gxrj文件夹的可写权限密码才行.

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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