http://blog.csdn.net/knight94/article/details/631309
要映射一个网络目录为本地驱动器,需要调用系统DLL的WNetAddConnection2函数来进行添加。
首先,系统函数的申明如下:
using System.Runtime.InteropServices;
[DllImport("mpr.dll", EntryPoint="WNetAddConnection2")]
public static extern uint WNetAddConnection2(
[In] NETRESOURCE lpNetResource,
string lpPassword,
string lpUsername,
uint dwFlags);
[DllImport("Mpr.dll")]
public static extern uint WNetCancelConnection2(
string lpName,
uint dwFlags,
bool fForce);
[StructLayout(LayoutKind.Sequential)]
public class NETRESOURCE
{
public int dwScope;
public int dwType;
public int dwDisplayType;
public int dwUsage;
public string LocalName;
public string RemoteName;
public string Comment;
public string Provider;
}
添加映射网络驱动器调用的代码如下:
NETRESOURCE myNetResource = new NETRESOURCE();
myNetResource.dwScope = 2; //2:RESOURCE_GLOBALNET
myNetResource.dwType = 1 ; //1:RESOURCETYPE_ANY
myNetResource.dwDisplayType = 3; //3:RESOURCEDISPLAYTYPE_GENERIC
myNetResource.dwUsage = 1; //1: RESOURCEUSAGE_CONNECTABLE
myNetResource.LocalName = "T:";
myNetResource.RemoteName = yourNetworkPath;
myNetResource.Provider = null;
uint nret = WNetAddConnection2( myNetResource, pwd, username, 0);
注意:如果正确,返回值是0;否则错误。
删除映射网络驱动器调用的代码如下:
uint nret = WNetCancelConnection2( yourNetDriveName, 1,true);
//局域网内copy文件
private void button1_Click(object sender, EventArgs e)
{
if (Ping(remoteHost))
{
if (Connect(remoteHost,"账号","密码"))
{
File.Copy("E:\\OpenForm.txt",@"\\192.168.1.21\file\chs.txt", true);//将OpenForm.txt内容copy到chs.txt中
}
}
}
public static bool Ping(string remoteHost)
{
bool Flag = false; //是否在线
Ping ping = new Ping();
PingReply pingReply = ping.Send(remoteHost);
if (pingReply.Status == IPStatus.Success)
{
Flag = true;
Console.WriteLine("当前在线,已ping通!");
}
else
{
Console.WriteLine("不在线,ping不通!");
}
return Flag;
}
public static bool Connect(string remoteHost, string userName, string passWord)
{
if (!Ping(remoteHost))
{
return false;
}
bool Flag = true;
Process proc = new Process();
try
{
proc.StartInfo.FileName = "cmd.exe";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardInput = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
string dosLine = @"net use \\" + remoteHost + " " + passWord + " " + " /user:" + userName + ">NUL";
proc.StandardInput.WriteLine(dosLine);
proc.StandardInput.WriteLine("exit");
while (proc.HasExited == false)
{
proc.WaitForExit(1000);
}
string errormsg = proc.StandardError.ReadToEnd();
if (errormsg != "")
{
Flag = false;
}
proc.StandardError.Close();
}
catch (Exception ex)
{
Flag = false;
}
finally
{
try
{
proc.Close();
proc.Dispose();
}
catch
{
}
}
return Flag;
}
/// 设置文件夹共享
/// </summary>
/// <param name="FolderPath">文件夹路径</param>
/// <param name="ShareName">共享名</param>
/// <param name="Description">共享注释</param>
/// <returns></returns>
public static int ShareNetFolder(string FolderPath, string ShareName, string Description)
{
try
{
ManagementClass managementClass = new ManagementClass("Win32_Share");
// Create ManagementBaseObjects for in and out parameters
ManagementBaseObject inParams = managementClass.GetMethodParameters("Create");
ManagementBaseObject outParams;
// Set the input parameters
inParams["Description"] = Description;
inParams["Name"] = ShareName;
inParams["Path"] = FolderPath;
inParams["Type"] = 0x0; // Disk Drive
outParams = managementClass.InvokeMethod("Create", inParams, null);
// Check to see if the method invocation was successful
if ((uint)(outParams.Properties["ReturnValue"].Value) != 0)
{
throw new Exception("Unable to share directory.");
}
}
catch
{
return -1;
}
return 0;
}