【第二次提问,如何从网内一台机器的共享目录内复制文件到本地???】

ouyangke 2005-02-24 08:45:52
在局域网内有一台服务器共享目录有一些文件,我现在要做一个ActiveX。
写一个函数,当调用这个函数就可以从服务器共享目录复制文件。



我用了copyfile不行的,可能存在用户登陆的问题,服务器是win2003。
客户机是98或者2000都有可能!

写的ActiveX要能在98,2000下面跑才行,请教高手帮忙!!

解决问题,100分送上。不够可以继续加分!!!
...全文
198 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
weill 2005-02-28
  • 打赏
  • 举报
回复
另外,重点提示:
windows2003主机默认情况下不许可无密码帐户远程登录(怎么打开,本人不知道,也没兴趣知道,呵呵)。

上面代码中的Edit1中显示出来的字串就是你持行的DOS命令字串,如果你持行不成功,请复制出来,去DOS命令窗中手动持行试试,要是在DOS窗中持行不成功,说明你的字串合成有误,请仔细校核。

以上代码本人在windows2003下本机测试通过。
weill 2005-02-28
  • 打赏
  • 举报
回复
上面代码中
WinExec(LS.c_str(),SW_SHOW);
改成
WinExec(LS.c_str(),SW_HIDE);
程序使用者就无法感觉到你调用了DOS命令了。
weill 2005-02-28
  • 打赏
  • 举报
回复
我来给你一个具体的示例吧,如果要抄下面的代码测试,请在窗体上加两个按钮Button2、Button3,和一个Edit1,并把下面代码放入对应的控件中(不会告诉我看不懂吧)。

//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{//新建磁盘影射

String LS = "net use z: \\\\199.100.100.2\\D$ \"MyPass\" /user:Administrator";
//说明:在这儿,主机IP为199.100.100.2,主机已有共享目录为D$
//登录用户为:Administrator,用户帐号为:MyPass。
//请根据你的实际情况修改上面一行代码。在这儿只是测试,
//实际使用,考虑安全,请不要使用Administrator帐号,否则可能持行完后,
//客机可以不打密码直接进主机的一些目录。

Edit1->Text = LS;
WinExec(LS.c_str(),SW_SHOW);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{//删除磁盘影射

String LS = "net use z: /del";
Edit1->Text = LS;
WinExec(LS.c_str(),SW_SHOW);
}
//---------------------------------------------------------------------------
ssyfrank 2005-02-28
  • 打赏
  • 举报
回复
gz
ouyangke 2005-02-28
  • 打赏
  • 举报
回复
我顶啊顶
ouyangke 2005-02-28
  • 打赏
  • 举报
回复
Maconel :
我直接用use net怎么总不行呢?
我的代码是这样的
ShellExecute(Handle, NULL, "net use Z: \\\\10.194.85.56\\共享", NULL, NULL, SW_SHOWNORMAL);

一点反映都没有。如果是
ShellExecute(Handle, NULL, "cmd", NULL, NULL, SW_SHOWNORMAL);
是能出dos命令符形式的~`
错在那里呢???
ouyangke 2005-02-28
  • 打赏
  • 举报
回复
感谢weill的详细描述
我使用你的方法
用WinExec在win2000操作系统成功通过

只是奇怪为什么我用ShellExecute不行呢

Maconel 2005-02-25
  • 打赏
  • 举报
回复
在我的电脑里点“工具” - “映射网络驱动器”,然后输入路径,写用户名密码就可以了。
这样可以把对方的一个文件夹映射成为你的一个磁盘驱动器,你用起来就象用自己的硬盘一样。

在控制台中可以用下边命令做同样工作:
net use z \\ip\文件夹名 "password" /user:username
这样就把对方的文件夹映射成了你的z盘。
net use z /del
断开映射。

如果在程序中使用,可以用WNetAddConnection2函数完成此工作,具体用法看下msdn吧。
这里有篇文章给你参考下(转自:立华软件园):

如何在应用程序中映射网络驱动器

我们知道在WINDOWS的平台上可以实现网络驱动器的映射,但在应用程序中如何映 射呢?以下的这个小程序就是演示如何在用户的应用程序中映射网络驱动器。在这里主 要用到了WINDOWS的两个API函数WNetAddConnection2(建立网络驱动器的映射)和 WNetCancelConnection2(取消网络驱动器的映射)以及一个NETRESOURCE结构(用来设 置网络资源)。---- 为了节省篇幅,我在这里只列出本演示程序的主要部分 OnMountButton (为建立网络驱动器的映射)和OnUnmountButton(为取消网络驱动器 的映射)。其中在下面的出现m_NetpathEdit 和m_DriveEdit 为用VC++定义的CEdit控 键。分别接收输入的网络路径和要建立的本地的驱动器盘符。它们都放置在一个对话框 中,如下图所示(略) ---- 建立网络驱动器的映射。

void CMountDlg::OnMountButton()

{

// TODO: Add your control notification handler code here

char netpath[MAX_PATH];

//输入的网络路径 m_NetpathEdit.GetWindowText(netpath, sizeof(netpath));

char drv[MAX_PATH];

//本地的驱动器盘符 m_DriveEdit.GetWindowText(drv, sizeof(drv));

NETRESOURCE netres; netres.dwScope=RESOURCE_GLOBALNET;

netres.dwType=RESOURCETYPE_ANY;

netres.dwDisplayType=RESOURCEDISPLAYTYPE_GENERIC;

netres.dwUsage=RESOURCEUSAGE_CONNECTABLE;

netres.lpLocalName=drv; netres.lpRemoteName=netpath;

netres.lpComment=NULL; netres.lpProvider=NULL;

DWORD rslt=WNetAddConnection2(&netres, NULL, NULL, 0);

CString str;

str.Format("WNetAddConnection2() return code=%d", rslt);

MessageBox(str);

}

取消网络驱动器的映射

void CMountDlg::OnUnmountButton()

{

// TODO: Add your control notification handler code here

char drv[MAX_PATH];

//本地的驱动器盘符

m_DriveEdit.GetWindowText(drv, sizeof(drv));

DWORD rslt=WNetCancelConnection2(drv, 0, FALSE);

CString str;

str.Format("WNetCancelConnection2() return code=%d", rslt);

MessageBox(str);

//显示信息成功与否 return code =0 成功 否则 建立失败

}

---- 本程序在VC++6.0及windows95/98/nt下编译通过。注意在程序的编译连接中加入 mpr.lib,我们用两个API函数在这个库中。
ouyangke 2005-02-25
  • 打赏
  • 举报
回复
啊 Maconel 那如何建立磁盘映射啊?
没听说过哦代码怎么写!
ouyangke 2005-02-24
  • 打赏
  • 举报
回复
我需要在用户不知情的时候把文件复制到他本机

不能使用磁盘映射的方法!!

Maconel(Maconel) 还有什么好方法啊?
lidawen 2005-02-24
  • 打赏
  • 举报
回复
支持.
Maconel 2005-02-24
  • 打赏
  • 举报
回复
先建立一个磁盘映射,把他的文件夹映射为你的一个盘,然后再copyfile。
mli0080 2005-02-24
  • 打赏
  • 举报
回复
对呀 只要你有权限登录就可以用磁盘映射,然后再复制
Maconel 2005-02-24
  • 打赏
  • 举报
回复
你用磁盘映射也不需要对方的同意呀,只要你有权限

13,825

社区成员

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

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