VB访问局域网硬盘某个目录下的文件的实现
一个局域网,一台服务器S,有N个客户端,现在要在客户端访问服务器S,把服务器S下目录C:\AD子目录下的所有文件下载到客户端硬盘上。
请问怎么实现?
问题点数:40、回复次数:12Top
1 楼wwqna(york)回复于 2004-12-11 15:02:32 得分 3
把那个文件夹共享出来
访问"\\s\ad"(假设你共享目录为ad)就和自己机子的文件一样了Top
2 楼aohan(aohan)回复于 2004-12-11 15:24:32 得分 5
'引用Visual Basic Objects and Procedures
Private Sub Command1_Click()
Set p_ofso = CreateObject("scripting.filesystemobject")
On Error Resume Next
Text1.Text = "c:\"
Text2.Text = "\\mr\c\word"
p_ofso.CopyFolder Trim(Text1.Text), Trim(Text2.Text), True
End Sub
Private Sub Command2_Click()
End
End Sub
Top
3 楼riverlj(yumu)回复于 2004-12-11 15:51:20 得分 0
哦~先试下,再结贴!先谢谢两位了 :)Top
4 楼tztz520(午夜逛街)回复于 2004-12-11 16:09:32 得分 2
可以将这个路径映射到本地硬盘再操作.Top
5 楼LittleLittleBoy(小小孩)回复于 2004-12-11 16:47:55 得分 0
好像要密码的吧,没有登陆怎么行啊 ?
我试着读取局域网硬盘空间大小,没有登录果就出错了啊,怎么用程序登录局域网啊Top
6 楼riverlj(yumu)回复于 2004-12-12 17:57:02 得分 0
是啊~局域网访问许需要用户名和密码吗?
还有怎样设置文件夹为共享?Top
7 楼DawnPine(拂晓的松)回复于 2004-12-13 08:37:47 得分 15
我想你肯定有服务器S上的管理员用户名和口令,这样你就可以先调用API建立一个IPC连接,然后你就能访问这台机器上的资源了。
在你的工程中增加一个模块,该模块代码如下:
Option Explicit
'=====================================说明======================================
'funIpcConn(资源名,用户名,口令)建立连接
'funIpcDisConn(资源名)断开连接
'引用:操作系统自带的库文件 mpr.dll
'=============================自定义常量========================================
Private Const RESOURCETYPE_DISK = &H1
Private Const RESOURCE_GLOBALNET As Long = &H2
Private Const RESOURCEDISPLAYTYPE_SHARE = &H3
Private Const RESOURCEUSAGE_CONNECTABLE = &H1
'=============================自定义结构========================================
Private Type NETRESOURCE
dwScope As Long
dwType As Long '用于指定网络的资源类型
dwDisplayType As Long
dwUsage As Long
lpLocalName As String '指定本地设备
lpRemoteName As String '指定远程网络名
lpComment As String
lpProvider As String '指定提供网络资源的供应商
End Type
'=================================API声明=======================================
Private Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" ( _
lpNetResource As NETRESOURCE, _
ByVal lpPassword As String, _
ByVal lpUserName As String, _
ByVal dwFlags As Long _
) As Long
Private Declare Function WNetCancelConnection2 Lib "mpr.dll" Alias "WNetCancelConnection2A" ( _
ByVal lpName As String, _
ByVal dwFlags As Long, _
ByVal fForce As Long _
) As Long
Public Function funIpcConn(ByVal strRemoteName As String, ByVal strUserName As String, ByVal strPassword As String) As Boolean
'目的:建立网络间的联系
'返回: True ---- 成功
' False --- 失败
'注释:strRemoteName为要连接的计算机名称(如:\\HostName、\\192.168.199.144、\\HostName\Data)
' strUserName为登录的用户名,strPassword为登录的密码
Dim NetR As NETRESOURCE
NetR.dwScope = RESOURCE_GLOBALNET
NetR.dwType = RESOURCETYPE_DISK
NetR.dwDisplayType = RESOURCEDISPLAYTYPE_SHARE
NetR.dwUsage = RESOURCEUSAGE_CONNECTABLE
NetR.lpRemoteName = strRemoteName
'建立网络映射
funIpcConn = IIf(WNetAddConnection2(NetR, strPassword, strUserName, 0) = 0, True, False)
End Function
Public Function funIpcDisConn(ByVal strName As String) As Long
funIpcDisConn = WNetCancelConnection2(strName, 0, 0) '原样返回API的返回值
End Function
Top
8 楼xayzmb(行者)回复于 2004-12-13 11:28:19 得分 5
写一个服务器程序
把指定位置的文件用winsock传过来
(有点象木马...)Top
9 楼sssmmm()回复于 2004-12-13 11:40:01 得分 0
upTop
10 楼myhgyp(也许是这样的,信不信由你)回复于 2004-12-13 12:15:10 得分 5
最简单、最原始的方法肯定没问题:
1、把该目录设为共享
2、把每台客户端的机器登录用户加入到服务器的用户列表中去(手工做一下即可),要注意的是:客户端的登录用户名和密码要也加入到服务器用户列表中的一样就可以了。
有时笨办法也是能解决问题的,试试吧,呵呵。。Top
11 楼riverlj(yumu)回复于 2004-12-17 20:19:42 得分 0
问题是:不一定这个目录一直是共享的,所以要用程序来控制为共享要好些!
还有,如果我不知道服务器S上的用户名和口令怎么办?怎么把那个文件下载到本地?
如果写一个服务器程序,把指定位置的文件用winsock传过来(有点象木马...),这个方法不错!有没有相关的例子啊
Top
12 楼DawnPine(拂晓的松)回复于 2004-12-21 08:51:08 得分 5
楼主,不知道服务器S上的用户名和口令还想访问上面的资源?这就是未经授权的闯入,好象有个什么计算机什么条例上说不许这么做 :-(
不过,如果你能在服务器S的Adminisrtators组里加1个用户,再利用这个用户登录大概就不算闯入了吧,呵呵……
当然,也可以反过来,让服务器主动连接你,类似上面说的木马方案,前提是你能在服务器上运行你的程序。上面有一段源码你可以试试。Top





