public TransferOperationResult PutFiles(string localPath, string remotePath, bool remove = false, TransferOptions options = null) { using (Logger.CreateCallstackAndLock()) { if (options == null) { options = new TransferOptions(); } CheckOpened(); WriteCommand( string.Format(CultureInfo.InvariantCulture, "put {0} {1} -- \"{2}\" \"{3}\"", BooleanSwitch(remove, "delete"), options.ToSwitches(), ArgumentEscape(localPath), ArgumentEscape(remotePath))); TransferOperationResult result = new TransferOperationResult(); using (ElementLogReader groupReader = _reader.WaitForGroupAndCreateLogReader()) using (RegisterOperationResult(result)) using (CreateProgressHandler()) { TransferEventArgs args = null; while (groupReader.Read(0)) { if (groupReader.IsNonEmptyElement(TransferEventArgs.UploadTag)) { if (args != null) { result.AddTransfer(args); RaiseFileTransferredEvent(args); } args = TransferEventArgs.Read(groupReader); } else if (groupReader.IsNonEmptyElement(ChmodEventArgs.Tag)) { if (args == null) { throw new InvalidOperationException(); } args.Chmod = ChmodEventArgs.Read(groupReader); } else if (groupReader.IsNonEmptyElement(TouchEventArgs.Tag)) { if (args == null) { throw new InvalidOperationException(); } args.Touch = TouchEventArgs.Read(groupReader); } } if (args != null) { result.AddTransfer(args); RaiseFileTransferredEvent(args); } } return result; } }
private void AddTransfer(TransferOperationResult result, TransferEventArgs args) { if (args != null) { result.AddTransfer(args); RaiseFileTransferredEvent(args); } }
public TransferOperationResult PutFiles(string localPath, string remotePath, bool remove = false, TransferOptions options = null) { using (Logger.CreateCallstackAndLock()) { if (options == null) { options = new TransferOptions(); } CheckOpened(); WriteCommand( string.Format(CultureInfo.InvariantCulture, "put {0} {1} -- \"{2}\" \"{3}\"", BooleanSwitch(remove, "delete"), options.ToSwitches(), Tools.ArgumentEscape(localPath), Tools.ArgumentEscape(remotePath))); TransferOperationResult result = new TransferOperationResult(); using (ElementLogReader groupReader = _reader.WaitForGroupAndCreateLogReader()) using (RegisterOperationResult(result)) using (CreateProgressHandler()) { TransferEventArgs args = null; bool mkdir = false; while (groupReader.Read(0)) { if (groupReader.IsNonEmptyElement(TransferEventArgs.UploadTag)) { AddTransfer(result, args); args = TransferEventArgs.Read(groupReader); mkdir = false; } else if (groupReader.IsNonEmptyElement(TransferEventArgs.MkDirTag)) { AddTransfer(result, args); args = null; mkdir = true; // For now, silently ignoring results (even errors) // of mkdir operation, including future chmod/touch } else if (groupReader.IsNonEmptyElement(ChmodEventArgs.Tag)) { if (!mkdir) { if (args == null) { throw new InvalidOperationException(); } args.Chmod = ChmodEventArgs.Read(groupReader); } } else if (groupReader.IsNonEmptyElement(TouchEventArgs.Tag)) { if (!mkdir) { if (args == null) { throw new InvalidOperationException(); } args.Touch = TouchEventArgs.Read(groupReader); } } } AddTransfer(result, args); } return result; } }
public string RunFtp(string hostIP, string port, string user, string pass, string remoteDirectory, string remoteFilePattern, string localFileDirectory, string pharmacyName, string localFileName, int numHoursGoback, string ram, ref DataTable tblExcel) { string result = ""; string localFileDirWithDateTime; string filePrefix = "SFTPDownload"; try { localFileDirWithDateTime = Helper.CreateDirectory(localFileDirectory, DateTime.Now, pharmacyName); } catch (Exception ex) { LogObj.WriteExcelrow("Failure!", enMsgType.enMsgType_Info, filePrefix, pharmacyName, "", DateTime.Now, "Failed trying to create a local Dir in " + localFileDirectory + ". Ftp for this pharm stopped.", ref tblExcel); return("Failure trying to create a directory in " + localFileDirectory + " for pharmacy " + pharmacyName + ". error:" + ex.Message); } try {//------------------------------------------------------------------------------------------------ WinSCP.SessionOptions sessionOptions = new WinSCP.SessionOptions { Protocol = WinSCP.Protocol.Sftp, HostName = hostIP, UserName = user, Password = pass, PortNumber = Convert.ToInt32(port) /* use these to connect to FTP, and leave out the fingerPrint.: * * _with1.Protocol = Protocol.Ftp; * _with1.FtpSecure = FtpSecure.Explicit; * */ }; string fingerprint = null; using (WinSCP.Session session = new WinSCP.Session()) { fingerprint = session.ScanFingerprint(sessionOptions); } if (fingerprint == null) { throw new Exception("Couldnt determine Host Fingerprint"); } else { sessionOptions.SshHostKeyFingerprint = fingerprint; } using (WinSCP.Session session = new WinSCP.Session()) { sessionOptions.Timeout = TimeSpan.FromMinutes(6); // 6 min timeout //session.ExecutablePath = @"C:\Software\v11\winscp.exe"; session.Open(sessionOptions); WinSCP.TransferOptions transferOptions = new WinSCP.TransferOptions(); transferOptions.TransferMode = WinSCP.TransferMode.Binary; WinSCP.TransferOperationResult transferResult = default(WinSCP.TransferOperationResult); transferResult = session.GetFiles(remoteDirectory + remoteFilePattern, localFileDirectory, false, transferOptions); transferResult.Check(); //THrows the first error if not successful foreach (WinSCP.TransferEventArgs transfer in transferResult.Transfers) { string downfileName = transfer.FileName; DateTime remoteWriteTime = session.GetFileInfo(downfileName).LastWriteTime; //get the DateTime of the file. if (remoteWriteTime >= DateTime.Now.AddHours(numHoursGoback * -1)) // ignore if older that the num Hours Goback spec by user { string localFilename = localFileDirWithDateTime + downfileName; //try //{ result += downfileName + "\r\n"; LogObj.WriteExcelrow("Success", enMsgType.enMsgType_Info, filePrefix, pharmacyName, downfileName, remoteWriteTime, "", ref tblExcel); // } //catch (Exception ex) //{ // LogObj.WriteExcelrow("Failure!", enMsgType.enMsgType_Info, filePrefix, // pharmacyName, downfileName, remoteWriteTime, ex.Message, ref tblExcel); // return "Failure occurred trying to Download SecureFtpWinSCP file " + downfileName + " for HostIp " + hostIP + " directory " + remoteDirectory + " files " + remoteFilePattern + " error:" + ex.Message + "\r\n"; //} } else { result += "Should be Ignored" + downfileName + " but still nowloaded." + "\r\n"; LogObj.WriteExcelrow("Success", enMsgType.enMsgType_Info, filePrefix, pharmacyName, downfileName, remoteWriteTime, " but still nowloaded.", ref tblExcel); //LogObj.WriteExcelrow("Ignored", enMsgType.enMsgType_Info, filePrefix, // pharmacyName, downfileName, file.Attributes.LastWriteTime, "its too old", ref tblExcel); } } } //------------------------------------------------------------------------------------------------------------------- return("Successfully downloaded to local dir " + localFileDirectory + " the following files: " + result); } catch (WinSCP.SessionRemoteException ex) { LogObj.WriteExcelrow("Failure!", enMsgType.enMsgType_Info, filePrefix, pharmacyName, "", DateTime.Now, "Check the remote settings. " + ex.Message, ref tblExcel); return("Failure occurred trying to connect to download SFtp for HostIp " + hostIP + " directory " + remoteDirectory + remoteFilePattern + " error:" + ex.Message + "\r\n"); } catch (System.TimeoutException ex) { LogObj.WriteExcelrow("Failure!", enMsgType.enMsgType_Info, filePrefix, pharmacyName, "", DateTime.Now, ex.Message, ref tblExcel); return("Failure occurred trying to connect to download SFtp for HostIp " + hostIP + " directory " + remoteDirectory + remoteFilePattern + " error:" + ex.Message + "\r\n"); } catch (Exception ex) { LogObj.WriteExcelrow("Failure!", enMsgType.enMsgType_Info, filePrefix, pharmacyName, "", DateTime.Now, ex.Message, ref tblExcel); return("Failure occurred trying to connect to download SFtp for HostIp " + hostIP + " directory " + remoteDirectory + remoteFilePattern + " error:" + ex.Message + "\r\n"); } }