• C#中Remote文件复制简例子


    Class Program

    {

        Void Main(){

        CopyFileToEDIServer("C:LogsNIS_20160930.log")

    }

    private void CopyFileToEDIServer(string path)
    {
    RemoteInfo remote = new RemoteInfo();
    //Remote Server IPAddress
    remote.RemoteIP = "192.168.131.133";
    //Remote Server User
    remote.RemoteUser = "administrator";
    //Remote Server Password
    remote.RemotePwd = "S3300859!";
    //Remote Server Share Folder Full Name
    remote.ShareName = @"\192.168.131.133pdf";
    string destinFile = remote.ShareName + FileUpload1.FileName;


    using (IdentityScope c = new IdentityScope(remote.RemoteIP, remote.RemoteUser, remote.RemotePwd))
    {
    System.IO.File.Copy(path, destinFile);
    }

    }

    }

    public class RemoteInfo
    {
    public string RemoteIP;
    public string RemotePwd;
    public string RemoteUser;
    public string ShareName;
    public string srcFileName;

    public RemoteInfo();
    }


    /// <summary>
    /// IdentityScope
    /// </summary>
    public class IdentityScope : IDisposable
    {
    // obtains user token
    [DllImport("advapi32.dll", SetLastError = true)]
    static extern bool LogonUser(
    string pszUsername,
    string pszDomain,
    string pszPassword,
    int dwLogonType,
    int dwLogonProvider,
    ref IntPtr phToken);

    // closes open handes returned by LogonUser
    [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
    extern static bool CloseHandle(IntPtr handle);

    [DllImport("Advapi32.DLL")]
    static extern bool ImpersonateLoggedOnUser(IntPtr hToken);

    [DllImport("Advapi32.DLL")]
    static extern bool RevertToSelf();

    const int LOGON32_PROVIDER_DEFAULT = 0;
    const int LOGON32_LOGON_NEWCREDENTIALS = 9;

    private bool disposed;

    public IdentityScope(string sDomain, string sUsername, string sPassword)
    {
    // initialize tokens
    IntPtr pExistingTokenHandle = new IntPtr(0);
    IntPtr pDuplicateTokenHandle = new IntPtr(0);

    try
    {
    // get handle to token
    bool bImpersonated = LogonUser(sUsername, sDomain, sPassword,
    LOGON32_LOGON_NEWCREDENTIALS, LOGON32_PROVIDER_DEFAULT, ref pExistingTokenHandle);

    if (true == bImpersonated)
    {
    if (!ImpersonateLoggedOnUser(pExistingTokenHandle))
    {
    int nErrorCode = Marshal.GetLastWin32Error();
    throw new Exception("ImpersonateLoggedOnUser error;Code=" + nErrorCode);
    }
    }
    else
    {
    int nErrorCode = Marshal.GetLastWin32Error();
    throw new Exception("LogonUser error;Code=" + nErrorCode);
    }
    }
    finally
    {
    // close handle(s)
    if (pExistingTokenHandle != IntPtr.Zero)
    {
    CloseHandle(pExistingTokenHandle);
    }
    if (pDuplicateTokenHandle != IntPtr.Zero)
    {
    CloseHandle(pDuplicateTokenHandle);
    }
    }
    }

    protected virtual void Dispose(bool disposing)
    {
    if (!disposed)
    {
    RevertToSelf();
    disposed = true;
    }
    }

    public void Dispose()
    {
    Dispose(true);
    }
    }

    Love it, and you live without it
  • 相关阅读:
    windows定时任务schtasks命令详细解
    TCP/IP 详解7 Ping指令
    Vue JSX、自定义 v-model
    DOM 元素的循环遍历
    关于 Blob
    Vue.nextTick 的应用解析
    弹窗组件及其回调函数
    krry-transfer ⏤ 基于 element 的升级版穿梭框组件发布到 npm 啦
    防抖与节流 & 若每个请求必须发送,如何平滑地获取最后一个接口返回的数据
    Java 单文件、多文件上传 / 实现上传进度条
  • 原文地址:https://www.cnblogs.com/tomclock/p/6292608.html
Copyright © 2020-2023  润新知