C# 使用WinSCP方法 類庫、腳本


官網下載:http://winscp.net/eng/docs/lang:chs

官網C#示例:http://winscp.net/eng/docs/library#csharp (全程英文,其他內容建議在園內搜索,其他地方好多沒有用的內容浪費時間)

引用類庫:WinSCPnet.dll

執行程序:WinSCP.exe  (放在項目根目錄中,沒有此文件類庫無法獨立運行)

難點: SshHostKeyFingerprint =  “ 給定的密鑰” 如果你不知道密鑰沒有關系,使用WinSCP.exe 程序,添加一個連接方式並登錄。 登錄后在Session選項中 選擇 Generate Session URL/Code .查詢軟件生成的代碼即可獲取 密鑰。

不同的版本密鑰也不一樣。

待解決問題:下載、上傳指定的文件類型 (如果有做完的同學請@我學習一下)

 

方式一 使用類庫操作

下載 PutFiles , 上傳 PutFiles

        /// <summary>
        /// WinSCP數據傳輸
        /// </summary>
        /// <param name="winscptype">選擇操作方式:上傳、下載</param>
        /// <param name="srcPath">源目錄</param>
        /// <param name="objPath">目標目錄</param>
        /// <param name="hostName">IP地址</param>
        /// <param name="userName">賬戶</param>
        /// <param name="password">密碼</param>
        /// <returns></returns>
        public int WinSCP(WinSCPType winscptype, string srcPath, string objPath, string hostName, string userName, string password, int portNumber, string sshHostKeyFingerprint)
        {
            try
            {
             Setup session options
            SessionOptions sessionOptions = new SessionOptions
            {
                Protocol = Protocol.Sftp,
                HostName = hostName,
                UserName = userName,
                Password = password,
                PortNumber = portNumber,
                SshHostKeyFingerprint = sshHostKeyFingerprint,
                //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; switch (winscptype) { case WinSCPType.Download: transferResult = session.GetFiles(srcPath, objPath, false, transferOptions); break; case WinSCPType.Upload: transferResult = session.PutFiles(srcPath, objPath, false, transferOptions); break; default: transferResult = session.GetFiles(srcPath, objPath, false, transferOptions); break; } // Throw on any error transferResult.Check(); // Print results foreach (TransferEventArgs transfer in transferResult.Transfers) { Console.WriteLine("{1} of {0} succeeded", transfer.FileName, Enum.Parse(typeof(WinSCPType), winscptype.GetHashCode().ToString()).ToString()); } } return 0; } catch (Exception e) { Console.WriteLine("Error: {0}", e); return 1; } }

 操作枚舉

public enum WinSCPType
{
    Download = 0,
    Upload = 1

}

 

方法二  使用腳本執行操作

     private string winSCPDefaultPath = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "WinSCP.exe";

        public string GetWinSCPBackupScript(string name, string pass, string ip, string backup_src, string backup_obj)
        {
            if (!File.Exists(winSCPDefaultPath))
            {
                Console.WriteLine("WinSCP.exe 執行程序不存在. 無法執行");
                return "WinSCP.exe 執行程序不存在. 無法執行";
            }

            StringBuilder sb = new StringBuilder();
            sb.AppendFormat("{0} /console /command", winSCPDefaultPath);
            sb.Append(" \"option batch continue\"");
            sb.Append(" \"option echo on\"");
            sb.Append(" \"option transfer binary\"");
            sb.AppendFormat(" \"open {0}:{1}@{2}\"", name, pass, ip);
            sb.AppendFormat(" \"cd {0}\"", backup_src);
            sb.AppendFormat(" \"lcd {0}\"", backup_obj);
            sb.AppendFormat(" \"get *.dat\"");
//sb.AppendFormat(" \"get {0}/{2} {1}\\{2} \"", backup_src, backup_obj, GetWeek() - 1); sb.AppendFormat(" \"exit\""); return sb.ToString(); }

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM