程序设计中,有时需要通过映射网络驱动器的方式实现访问网络上的文件。为避免增加用户的操作负担,需要通过程序代码来完成。
第一种方法:调用API函数:
* 映射网络驱动器
Declare integer WNetAddConnection in "mpr.dll" ;
string cRemoteName, ;
string cPassword, ;
string cLocalName
lcresource = '\\'+IP地址+'\我的共享文件夹'
lcpassword = ""
lcdriveletter = "Z:"
lnretu = WNetAddConnection(lcresource, lcpassword, lcdriveletter)
IF lnretu == 0 then
vmess="成功映射[Z:]驱动器"
ELSE
vmess='映射失败。'
endif
=messagebox(vmess)
* 断开网络映射
Declare integer WNetCancelConnection in "mpr.dll" ;
string cName, ;
integer nForce
lcname = "Z:"
lnforce = 0 && = 1 为强制断开, 即使文件是打开的
lnretu = WNetCancelConnection(lcname, lnforce)
=messagebox( iif(lnretu = 0, "成功删除驱动器[Z:]映射", '断开失败。') )
第二种方法:调用myFll的ShareMapDrive函数
MyFll是专为Microsoft Visual FoxPro设计的扩展库。其中的ShareMapDrive函数可方便的实现映射网络驱动器。代码示例如下:
SET LIBRARY TO myFll.fll
lcresource = '\\'+IP地址+'\我的共享文件夹'
lnretu=ShareMapDrive(lcresource,"Z:")
IF lnretu == 0 then
vmess="成功映射[X:]驱动器"
ELSE
vmess='映射失败。'
ENDIF
=messagebox(vmess)
实践中,上述两种方法在大部分场景能成功映射,但在某些电脑上发现有时不能成功(win7、win10等系统环境不同的情形下测试)。此时,试着在不成功的电脑上执行net use命令,竟然能成功映射,说明应该不是系统的问题,因此决定换用net use命令,以适应不同的应用环境。但需要解决弹出命令提示符窗口的问题,这可通过调用API的WinExec函数来实现。
第三种方法:调用API的WinExec函数执行DOS命令net use。代码示例如下:
DECLARE INTEGER WinExec IN "kernel32" STRING,INTEGER
lcresource = '\\'+IP地址+'\我的共享文件夹'
vcode="net use X: "+lcresource
=winexec(vcode,0)
其中的第二个参数0为静默执行,不弹出cmd窗口。其他值为:1默认窗口,2最小化,3最大化。
在映射驱动器之前,需要设置共享文件夹。方法步骤也一并记录在此:在网络和共享中心,启用“网络发现”、“文件和打印机共享”、“公用文件夹共享”。此外需要将“密码保护的共享”部分勾选“关闭密码保护共享”选项,还要添加everyone,并检查防火墙。
以上代码在VFP9中验证通过。其他语言可参考。