C#中Remote文件复制简例子

Class Program

{

    Void Main(){

    CopyFileToEDIServer("C:\Logs\NIS_20160930.log")

}

private void CopyFileToEDIServer(string path)
{
RemoteInfo remote = new RemoteInfo();
//リモートサーバ IPAddress
remote.RemoteIP = "192.168.131.133";
//リモートサーバ ユーザ名
remote.RemoteUser = "administrator";
//リモートサーバ パスワード
remote.RemotePwd = "S3300859!";
//リモートサーバのShareフォルダ名
remote.ShareName = @"\\192.168.131.133\pdf\";
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);
}
}

时间: 2024-08-05 13:51:47

C#中Remote文件复制简例子的相关文章

Windows系统中监控文件复制操作的几种方式

http://blog.sina.com.cn/s/blog_4596beaa0100lp4y.html 1. ICopyHook 作用: 监视文件夹和打印机移动,删除, 重命名, 复制操作. 可以得到源和目标文件名. 可以控制拒绝操作. 缺点: 不能对文件进行控制. 只对Shell文件操作有效, 对原生Api MoveFile, CopyFile之类的操作无效. 用法: 从ICopyHook派生一个COM对象, 重载CopyCallbackA和CopyCallbackW, 然后把COM注册到H

Java中实现文件复制(servlet)

String filePath = request.getParameter("filePath"); filePath = request.getServletContext().getRealPath("/") + filePath; String targetPath = request.getParameter("target"); File file = new File(filePath); FileInputStream in =

在linux内核中读写文件

http://blog.csdn.net/tommy_wxie/article/details/8194276 1. 序曲 在用户态,读写文件可以通过read和write这两个系统调用来完成(C库函数实际上是对系统调用的封装). 但是,在内核态没有这样的系统调用,我们又该如何读写文件呢? 阅读Linux内核源码,可以知道陷入内核执行的是实际执行的是sys_read和sys_write这两个函数,但是这两个函数没有使用EXPORT_SYMBOL导出,也就是说其他模块不能使用. 在fs/open.c

linux下拷贝命令中的文件过滤操作记录

在日常的运维工作中,经常会涉及到在拷贝某个目录时要排查其中的某些文件.废话不多说,下面对这一需求的操作做一记录: linux系统中,假设要想将目录A中的文件复制到目录B中,并且复制时过滤掉源目录A中的文件a和b做法如下:#cd A#cp -r `ls |grep -v a |grep -v b| xargs` B注意:1)上面在cp命令执行前,最好提前cd切换到源目录A下,不然就要在ls后跟全路径,否则就会报错.2)命中中的xargs参数加不加效果都一样,不过最好是加上,表示前面的命令输出3)g

【转】在linux内核中读写文件 -- 不错

原文网址:http://blog.csdn.net/tommy_wxie/article/details/8194276 1. 序曲 在用户态,读写文件可以通过read和write这两个系统调用来完成(C库函数实际上是对系统调用的封装). 但是,在内核态没有这样的系统调用,我们又该如何读写文件呢? 阅读linux内核源码,可以知道陷入内核执行的是实际执行的是sys_read和sys_write这两个函数,但是这两个函数没有使用EXPORT_SYMBOL导出,也就是说其他模块不能使用. 在fs/o

文件复制的疑惑

最近在写一个gradle插件过程中,为Task定义文件复制方法时,发现文件并没有被复制,本来是一个很简单的操作,却出现了如此不解的现象.因编写gradle插件调试不易,所以花了比较多的时间才发现问题,所以谨此记录. 下面一个精简版的Task类: import java.io.File; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import org.apache.commons.io.File

ASP.NET中的文件操作(文件信息,新建,移动,复制,重命名,上传,遍历)(亲测详细)

做了几天的文件操作,现在来总结一下,错误之处,还望指点!以文件为例,如果对文件夹操作,基本上将File换为Directory即可(例:FileInfo file = new FileInfo(Path);与DirectoryInfo directory = new DirectoryInfo (Path);) 1获取文件信息 在知道文件相对路径的情形,下面代码可以获取文件的详细信息 1 public static void fileinfo(string Path) 2 { 3 Path = S

学习写一个能够将文件复制、解压到指定文件夹中的批处理文件

场景1:afoldersource中有若干文件夹和若干压缩文件,现在将afoldersource中的文件全部复制到afolderdist中. afoldersource: 脚本: @ECHO OFF ##关闭命令回显 echo copy file ##显示一句话 SET sourcepath=E:\afoldersource ##定义源地址 SET destpath=E:\afolderdist ##定义目标地址 rmdir %destpath%\folder /s /q ##删除目标地址中的文

IO流的练习2 ——— 复制单级文件夹中的文件

需求:把C:\Users\Administrator\Desktop\记录\测试里面的所有文件复制到 C:\Users\Administrator\Desktop\新建文件夹\copy文件夹中 分析: A:封装目录 B:获取该目录下的所有文件的File数组 C:遍历该集合,得到每一个File对象 D:把每个File复制到目的文件夹中 1 public static void main(String[] args) throws IOException { 2 // 封装目录 3 File sta