zoukankan      html  css  js  c++  java
  • C# 共享文件读取(转)

    using System;
    using System.Runtime.InteropServices;
    using BOOL = System.Boolean;
    using DWORD = System.UInt32;
    using LPWSTR = System.String;
    using NET_API_STATUS = System.UInt32;

    namespace ConnectUNCWithCredentials
    {
    public class UNCAccessWithCredentials : IDisposable
    {
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    internal struct USE_INFO_2
    {
    internal LPWSTR ui2_local;
    internal LPWSTR ui2_remote;
    internal LPWSTR ui2_password;
    internal DWORD ui2_status;
    internal DWORD ui2_asg_type;
    internal DWORD ui2_refcount;
    internal DWORD ui2_usecount;
    internal LPWSTR ui2_username;
    internal LPWSTR ui2_domainname;
    }

    [DllImport("NetApi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
    internal static extern NET_API_STATUS NetUseAdd(
    LPWSTR UncServerName,
    DWORD Level,
    ref USE_INFO_2 Buf,
    out DWORD ParmError);

    [DllImport("NetApi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
    internal static extern NET_API_STATUS NetUseDel(
    LPWSTR UncServerName,
    LPWSTR UseName,
    DWORD ForceCond);

    private bool disposed = false;

    private string sUNCPath;
    private string sUser;
    private string sPassword;
    private string sDomain;
    private int iLastError;

    /// <summary>
    /// A disposeable class that allows access to a UNC resource with credentials.
    /// </summary>
    public UNCAccessWithCredentials()
    {
    }

    /// <summary>
    /// The last system error code returned from NetUseAdd or NetUseDel. Success = 0
    /// </summary>
    public int LastError
    {
    get { return iLastError; }
    }

    public void Dispose()
    {
    if (!this.disposed)
    {
    NetUseDelete();
    }
    disposed = true;
    GC.SuppressFinalize(this);
    }

    /// <summary>
    /// Connects to a UNC path using the credentials supplied.
    /// </summary>
    /// <param name="UNCPath">Fully qualified domain name UNC path</param>
    /// <param name="User">A user with sufficient rights to access the path.</param>
    /// <param name="Domain">Domain of User.</param>
    /// <param name="Password">Password of User</param>
    /// <returns>True if mapping succeeds. Use LastError to get the system error code.</returns>
    public bool NetUseWithCredentials(string UNCPath, string User, string Domain, string Password)
    {
    sUNCPath = UNCPath;
    sUser = User;
    sPassword = Password;
    sDomain = Domain;
    return NetUseWithCredentials();
    }

    private bool NetUseWithCredentials()
    {
    uint returncode;
    try
    {
    USE_INFO_2 useinfo = new USE_INFO_2();

    useinfo.ui2_remote = sUNCPath;
    useinfo.ui2_username = sUser;
    useinfo.ui2_domainname = sDomain;
    useinfo.ui2_password = sPassword;
    useinfo.ui2_asg_type = 0;
    useinfo.ui2_usecount = 1;
    uint paramErrorIndex;
    returncode = NetUseAdd(null, 2, ref useinfo, out paramErrorIndex);
    iLastError = (int)returncode;
    return returncode == 0;
    }
    catch
    {
    iLastError = Marshal.GetLastWin32Error();
    return false;
    }
    }

    /// <summary>
    /// Ends the connection to the remote resource
    /// </summary>
    /// <returns>True if it succeeds. Use LastError to get the system error code</returns>
    public bool NetUseDelete()
    {
    uint returncode;
    try
    {
    returncode = NetUseDel(null, sUNCPath, 2);
    iLastError = (int)returncode;
    return (returncode == 0);
    }
    catch
    {
    iLastError = Marshal.GetLastWin32Error();
    return false;
    }
    }

    ~UNCAccessWithCredentials()
    {
    Dispose();
    }

    }
    }

  • 相关阅读:
    数据库的三大范式
    mysql中变量的定义
    java实现用两个栈实现队列
    java实现替换空格
    java实现二维数组中查找
    struts2核心配置之Action
    struts2核心配置之struts.xml
    初识struts2
    $.ajax()参数详解
    百度Map-JSAPI-覆盖物范围查询标记
  • 原文地址:https://www.cnblogs.com/prettyisshit/p/4922322.html
Copyright © 2011-2022 走看看