C# 使用WinSCP方法 類庫、指令碼
阿新 • • 發佈:2020-11-18
官網下載: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(); }