C#调用第三方工具完成FTP操作

作者:springsnow 时间:2021-08-23 09:52:48 

一、FileZilla

Filezilla分为client和server。其中FileZilla Server是Windows平台下一个小巧的第三方FTP服务器软件,系统资源也占用非常小,可以让你快速简单的建立自己的FTP服务器。

打开FileZilla,进行如下操作

C#调用第三方工具完成FTP操作

下图红色区域就是linux系统的文件目录,可以直接把windows下的文件直接拖拽进去。

C#调用第三方工具完成FTP操作

二、WinSCP

跟FileZilla一样,也是一款十分方便的文件传输工具。WinSCP是连接Windows和Linux的。

C#调用第三方工具完成FTP操作

C#调用第三方工具完成FTP操作

WinSCP .NET Assembly and SFTP

https://winscp.net/eng/docs/library#csharp

// Setup session options
SessionOptions sessionOptions = new SessionOptions
{
   Protocol = Protocol.Sftp,
   HostName = "example.com",
   UserName = "user",
   Password = "mypassword",
   SshHostKeyFingerprint = "ssh-rsa 2048 xxxxxxxxxxx...="
};

using (Session session = new Session())
{
   // Connect
   session.Open(sessionOptions);

// Upload files
   TransferOptions transferOptions = new TransferOptions();
   transferOptions.TransferMode = TransferMode.Binary;

TransferOperationResult transferResult;
   transferResult =  session.PutFiles(@"d:\toupload\*", "/home/user/", false, transferOptions);

// Throw on any error
   transferResult.Check();

// Print results
   foreach (TransferEventArgs transfer in transferResult.Transfers)
   {
       Console.WriteLine("Upload of {0} succeeded", transfer.FileName);
   }
}

三、FluentFTP

FluentFTP是一款老外开发的基于.Net的支持FTP及的FTPS 的FTP类库,FluentFTP是完全托管的FTP客户端,被设计为易于使用和易于扩展。它支持文件和目录列表,上传和下载文件和SSL / TLS连接。

它底层由Socket实现,可以连接到Unix和Windows IIS建立FTP的服务器,

github:https://github.com/robinrodricks/FluentFTP

举例:

// create an FTP client
FtpClient client = new FtpClient("123.123.123.123");

// if you don't specify login credentials, we use the "anonymous" user account
client.Credentials = new NetworkCredential("david", "pass123");

// begin connecting to the server
client.Connect();

// get a list of files and directories in the "/htdocs" folder
foreach (FtpListItem item in client.GetListing("/htdocs")) {

// if this is a file
   if (item.Type == FtpFileSystemObjectType.File){

// get the file size
       long size = client.GetFileSize(item.FullName);

}

// get modified date/time of the file or folder
   DateTime time = client.GetModifiedTime(item.FullName);

// calculate a hash for the file on the server side (default algorithm)
   FtpHash hash = client.GetHash(item.FullName);

}

// upload a file
client.UploadFile(@"C:\MyVideo.mp4", "/htdocs/big.txt");

// rename the uploaded file
client.Rename("/htdocs/big.txt", "/htdocs/big2.txt");

// download the file again
client.DownloadFile(@"C:\MyVideo_2.mp4", "/htdocs/big2.txt");

// delete the file
client.DeleteFile("/htdocs/big2.txt");

// delete a folder recursively
client.DeleteDirectory("/htdocs/extras/");

// check if a file exists
if (client.FileExists("/htdocs/big2.txt")){ }

// check if a folder exists
if (client.DirectoryExists("/htdocs/extras/")){ }

// upload a file and retry 3 times before giving up
client.RetryAttempts = 3;
client.UploadFile(@"C:\MyVideo.mp4", "/htdocs/big.txt", FtpExists.Overwrite, false, FtpVerify.Retry);

// disconnect! good bye!
client.Disconnect();

对FluentFTP部分操作封装类

public class FtpFileMetadata
{
   public long FileLength { get; set; }
   public string MD5Hash { get; set; }
   public DateTime LastModifyTime { get; set; }
}

public class FtpHelper
{
   private FtpClient _client = null;
   private string _host = "127.0.0.1";
   private int _port = 21;
   private string _username = "Anonymous";
   private string _password = "";
   private string _workingDirectory = "";
   public string WorkingDirectory
   {
       get
       {
           return _workingDirectory;
       }
   }
   public FtpHelper(string host, int port, string username, string password)
   {
       _host = host;
       _port = port;
       _username = username;
       _password = password;
   }

public Stream GetStream(string remotePath)
   {
       Open();
       return _client.OpenRead(remotePath);
   }

public void Get(string localPath, string remotePath)
   {
       Open();
       _client.DownloadFile(localPath, remotePath, true);
   }

public void Upload(Stream s, string remotePath)
   {
       Open();
       _client.Upload(s, remotePath, FtpExists.Overwrite, true);
   }

public void Upload(string localFile, string remotePath)
   {
       Open();
       using (FileStream fileStream = new FileStream(localFile, FileMode.Open))
       {
           _client.Upload(fileStream, remotePath, FtpExists.Overwrite, true);
       }
   }

public int UploadFiles(IEnumerable<string> localFiles, string remoteDir)
   {
       Open();
       List<FileInfo> files = new List<FileInfo>();
       foreach (var lf in localFiles)
       {
           files.Add(new FileInfo(lf));
       }
       int count = _client.UploadFiles(files, remoteDir, FtpExists.Overwrite, true, FtpVerify.Retry);
       return count;
   }

public void MkDir(string dirName)
   {
       Open();
       _client.CreateDirectory(dirName);
   }

public bool FileExists(string remotePath)
   {
       Open();
       return _client.FileExists(remotePath);
   }
   public bool DirExists(string remoteDir)
   {
       Open();
       return _client.DirectoryExists(remoteDir);
   }

public FtpListItem[] List(string remoteDir)
   {
       Open();
       var f = _client.GetListing();
       FtpListItem[] listItems = _client.GetListing(remoteDir);
       return listItems;
   }

public FtpFileMetadata Metadata(string remotePath)
   {
       Open();
       long size = _client.GetFileSize(remotePath);
       DateTime lastModifyTime = _client.GetModifiedTime(remotePath);

return new FtpFileMetadata()
       {
           FileLength = size,
           LastModifyTime = lastModifyTime
       };
   }

public bool TestConnection()
   {
       return _client.IsConnected;
   }

public void SetWorkingDirectory(string remoteBaseDir)
   {
       Open();
       if (!DirExists(remoteBaseDir))
           MkDir(remoteBaseDir);
       _client.SetWorkingDirectory(remoteBaseDir);
       _workingDirectory = remoteBaseDir;
   }
   private void Open()
   {
       if (_client == null)
       {
           _client = new FtpClient(_host, new System.Net.NetworkCredential(_username, _password));
           _client.Port = 21;
           _client.RetryAttempts = 3;
           if (!string.IsNullOrWhiteSpace(_workingDirectory))
           {
               _client.SetWorkingDirectory(_workingDirectory);
           }
       }
   }
}

来源:https://www.cnblogs.com/springsnow/p/10149301.html

标签:C#,第三方,工具,FTP,操作
0
投稿

猜你喜欢

  • 基于opencv实现车道线检测

    2023-03-11 10:07:52
  • C#递归应用之实现JS文件的自动引用

    2023-12-09 00:03:52
  • Java实现角色扮演游戏的示例代码

    2023-03-31 19:41:45
  • C#学习笔记整理_深入剖析构造函数、析构函数

    2022-10-26 18:37:20
  • C#如何使用Task类解决线程的等待问题

    2023-01-04 18:23:22
  • Java花式解决'分割回文串 ii'问题详解

    2022-07-09 02:01:58
  • android开发教程之自定义属性用法详解

    2022-09-22 20:26:17
  • Java由浅入深带你了解什么是包package

    2022-04-17 02:33:39
  • Java 通过AQS实现数据组织

    2023-04-05 22:19:29
  • Feign远程调用Multipartfile参数处理

    2022-09-22 02:46:24
  • Java深入了解数据结构中常见的排序算法

    2021-11-02 23:33:53
  • HashMap在JDK7与JDK8中的实现过程解析

    2022-03-04 18:26:44
  • SpringMVC后端返回数据到前端代码示例

    2023-06-20 13:12:47
  • 浅析Spring和MyBatis整合及逆向工程

    2022-07-09 08:27:11
  • SpringBoot自动装配之Condition深入讲解

    2023-12-03 02:20:29
  • 基于SpringBoot多线程@Async的使用体验

    2021-07-15 04:47:04
  • 深入浅析jni中的java接口使用

    2023-07-22 19:54:23
  • Android开发中应用程序分享功能实例

    2021-05-27 20:38:46
  • JavaWeb简单文件上传流程的实战记录

    2023-04-02 09:14:59
  • Java基于Tcp协议的socket编程实例

    2022-03-08 00:04:13
  • asp之家 软件编程 m.aspxhome.com