最近要实现访问远程主机的共享目录中的一个文件。遇到了权限问题。google了一下,找到了几种解决方法,记录如下:

一、调用Net use命令

// 使用方法:

//if (Connect("192.168.1.48", "用户名", "密码"))

//{

//    File.Copy(@"\\192.168.1.48\共享目录\test.txt",   @"e:\\test.txt",   true);

//}

public bool Connect(string remoteHost, string userName, string passWord)

{

bool Flag = true;

Process proc = new Process();

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;

try

{

proc.Start();

string command = @"net  use  \\" + remoteHost + "  " + passWord + "  " + "  /user:" + userName + ">NUL";

proc.StandardInput.WriteLine(command);

command = "exit";

proc.StandardInput.WriteLine(command);

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

{

proc.Close();

proc.Dispose();

}

return Flag;

}

二、调用WNetAddConnection2、WNetAddConnection3或者NetUseAdd函数,进行磁盘映射。

using System;

using System.Collections.Generic;

using System.Text;

using System.Runtime.InteropServices;

namespace WindowsApplication1

{

public class MyMap

{

[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;

}

// remoteNetworkPath format:  @"\\192.168.1.48\sharefolder"

// localDriveName format:     @"E:"

public static bool CreateMap(string userName, string password, string remoteNetworkPath, string localDriveName)

{

NETRESOURCE myNetResource = new NETRESOURCE();

myNetResource.dwScope = 2;       //2:RESOURCE_GLOBALNET

myNetResource.dwType = 1;   &