zoukankan      html  css  js  c++  java
  • FTP工具FileZilla、WinSCP、FTP类库FluentFTP

    一、FileZilla

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

    打开FileZilla,进行如下操作


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

    二、WinSCP

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



    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:	oupload*", "/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);
                }
            }
        }
    }
  • 相关阅读:
    P4009 汽车加油行驶问题
    P2761 软件补丁问题
    P1251 餐巾计划问题
    P2766 最长不下降子序列问题
    P4011 孤岛营救问题
    P2765 魔术球问题
    P2770 航空路线问题
    P2762 太空飞行计划问题
    P2764 最小路径覆盖问题
    P3355 骑士共存问题
  • 原文地址:https://www.cnblogs.com/springsnow/p/10149301.html
Copyright © 2011-2022 走看看