c#客户端 通过用户名密码访问服务器文件,C#通过用户名与密码访问共享目录

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Runtime.InteropServices;namespaceFileTools

{public classNetworkShareConnect

{#region WNetUseConnection枚举参数

//dwScope

const int RESOURCE_CONNECTED = 0x00000001;const int RESOURCE_GLOBALNET = 0x00000002;const int RESOURCE_REMEMBERED = 0x00000003;//dwType

const int RESOURCETYPE_ANY = 0x00000000;const int RESOURCETYPE_DISK = 0x00000001;const int RESOURCETYPE_PRINT = 0x00000002;//dwDisplayType

const int RESOURCEDISPLAYTYPE_GENERIC = 0x00000000;const int RESOURCEDISPLAYTYPE_DOMAIN = 0x00000001;const int RESOURCEDISPLAYTYPE_SERVER = 0x00000002;const int RESOURCEDISPLAYTYPE_SHARE = 0x00000003;const int RESOURCEDISPLAYTYPE_FILE = 0x00000004;const int RESOURCEDISPLAYTYPE_GROUP = 0x00000005;//dwUsage

const int RESOURCEUSAGE_CONNECTABLE = 0x00000001;const int RESOURCEUSAGE_CONTAINER = 0x00000002;//dwFlags

const int CONNECT_INTERACTIVE = 0x00000008;const int CONNECT_PROMPT = 0x00000010;const int CONNECT_REDIRECT = 0x00000080;const int CONNECT_UPDATE_PROFILE = 0x00000001;const int CONNECT_COMMANDLINE = 0x00000800;const int CONNECT_CMD_SAVECRED = 0x00001000;const int CONNECT_LOCALDRIVE = 0x00000100;#endregion

#region Errors参数

const int NO_ERROR = 0;const int ERROR_ACCESS_DENIED = 5;const int ERROR_ALREADY_ASSIGNED = 85;const int ERROR_BAD_DEVICE = 1200;const int ERROR_BAD_NET_NAME = 67;const int ERROR_BAD_PROVIDER = 1204;const int ERROR_CANCELLED = 1223;const int ERROR_EXTENDED_ERROR = 1208;const int ERROR_INVALID_ADDRESS = 487;const int ERROR_INVALID_PARAMETER = 87;const int ERROR_INVALID_PASSWORD = 1216;const int ERROR_MORE_DATA = 234;const int ERROR_NO_MORE_ITEMS = 259;const int ERROR_NO_NET_OR_BAD_PATH = 1203;const int ERROR_NO_NETWORK = 1222;const int ERROR_BAD_PROFILE = 1206;const int ERROR_CANNOT_OPEN_PROFILE = 1205;const int ERROR_DEVICE_IN_USE = 2404;const int ERROR_NOT_CONNECTED = 2250;const int ERROR_OPEN_FILES = 2401;private structErrorClass

{//定义错误类结构体

public intnum;public stringmessage;public ErrorClass(int num, stringmessage)

{this.num =num;this.message =message;

}

}//连接失败信息汇总

private static ErrorClass[] ERROR_LIST = newErrorClass[] {new ErrorClass(ERROR_ACCESS_DENIED, "Error: Access Denied"),new ErrorClass(ERROR_ALREADY_ASSIGNED, "Error: Already Assigned"),new ErrorClass(ERROR_BAD_DEVICE, "Error: Bad Device"),new ErrorClass(ERROR_BAD_NET_NAME, "Error: Bad Net Name"),new ErrorClass(ERROR_BAD_PROVIDER, "Error: Bad Provider"),new ErrorClass(ERROR_CANCELLED, "Error: Cancelled"),new ErrorClass(ERROR_EXTENDED_ERROR, "Error: Extended Error"),new ErrorClass(ERROR_INVALID_ADDRESS, "Error: Invalid Address"),new ErrorClass(ERROR_INVALID_PARAMETER, "Error: Invalid Parameter"),new ErrorClass(ERROR_INVALID_PASSWORD, "Error: Invalid Password"),new ErrorClass(ERROR_MORE_DATA, "Error: More Data"),new ErrorClass(ERROR_NO_MORE_ITEMS, "Error: No More Items"),new ErrorClass(ERROR_NO_NET_OR_BAD_PATH, "Error: No Net Or Bad Path"),new ErrorClass(ERROR_NO_NETWORK, "Error: No Network"),new ErrorClass(ERROR_BAD_PROFILE, "Error: Bad Profile"),new ErrorClass(ERROR_CANNOT_OPEN_PROFILE, "Error: Cannot Open Profile"),new ErrorClass(ERROR_DEVICE_IN_USE, "Error: Device In Use"),new ErrorClass(ERROR_EXTENDED_ERROR, "Error: Extended Error"),new ErrorClass(ERROR_NOT_CONNECTED, "Error: Not Connected"),new ErrorClass(ERROR_OPEN_FILES, "Error: Open Files"),

};private static string getErrorForNumber(interrNum)

{//遍历获得错误代码

foreach (ErrorClass er inERROR_LIST)

{if (er.num == errNum) returner.message;

}return "Error: Unknown," +errNum;

}#endregion

//调用系统函数WNetUseConnection//用于连接共享

[DllImport("Mpr.dll")]private static extern intWNetUseConnection(

IntPtr hwndOwner,

NETRESOURCE lpNetResource,stringlpPassword,stringlpUserID,intdwFlags,stringlpAccessName,stringlpBufferSize,stringlpResult

);//用于删除连接

[DllImport("Mpr.dll")]private static extern intWNetCancelConnection2(stringlpName,intdwFlags,boolfForce

);

[StructLayout(LayoutKind.Sequential)]private classNETRESOURCE

{public int dwScope = 0;public int dwType = 0;public int dwDisplayType = 0;public int dwUsage = 0;public string lpLocalName = "";//映射到本地的盘符,如"Z:"。不做驱动器映射,可为空

public string lpRemoteName = "";//共享的网络路径

public string lpComment = "";public string lpProvider = "";

}///

///连接共享///

/// 共享网络路径

/// 登录用户名

/// 密码

///

public static string connectToShare(string remoteUNC, string username, stringpassword)

{return connectToRemote(remoteUNC, username, password, false);

}///

///没用户密码连接///

/// 共享网络路径

///

public static string connectToShare(stringremoteUNC)

{return connectToRemote(remoteUNC, "", "", true);

}private static string connectToRemote(string remoteUNC, string username, string password, boolpromptUser)

{

NETRESOURCE nr= newNETRESOURCE

{

dwType=RESOURCETYPE_DISK,

lpRemoteName=remoteUNC

};intret;if(promptUser)

ret= WNetUseConnection(IntPtr.Zero, nr, "", "", CONNECT_INTERACTIVE | CONNECT_PROMPT, null, null, null);elseret= WNetUseConnection(IntPtr.Zero, nr, password, username, 0, null, null, null);if (ret == NO_ERROR) return null;returngetErrorForNumber(ret);

}public static string disconnectRemote(stringremoteUNC)

{int ret = WNetCancelConnection2(remoteUNC, CONNECT_UPDATE_PROFILE, false);if (ret == NO_ERROR) return null;returngetErrorForNumber(ret);

}

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值