/// <summary> /// 复制文件 /// </summary> /// <param name="sf"></param> /// <param name="ms"></param> /// <param name="sshOP">SSH output path</param> /// <param name="sftpProxy"></param> private void SSHCopyFile(SftpFile sf, MonitorServer ms, string sshOP, SFTPProxy sftpProxy) { var sshlog = new Common.Util.SSHLogManager(); //获取本地合法路径 string localPath = GetValidLocalPath(sf.FullName, ms.monitorMacPath, ms.monitorLocalPath); //获取SSH输出路径 暂时不支持网络位置 if (string.IsNullOrWhiteSpace(sshOP.Trim())) { localPath = localPath.Substring(0, localPath.IndexOf(':') + 1) + "\\SSH\\" + ms.monitorServerName + "-SSH"; } else { sshOP.TrimEnd('\\'); localPath = localPath.Replace(ms.monitorLocalPath.TrimEnd('\\'), sshOP + "\\" + ms.monitorServerName + "-SSH"); } #region 制 DateTime dateM = sf.Attributes.LastWriteTime; DateTime dateA = sf.Attributes.LastAccessTime; #region try { Alphaleonis.Win32.Filesystem.FileInfo targetFile = new Alphaleonis.Win32.Filesystem.FileInfo(localPath); //如果文件没有发生改变,则不进行下载 if (targetFile.Exists) { if (targetFile.LastWriteTime == dateM) { return; } } if (!Directory.Exists(targetFile.DirectoryName)) { try { Directory.CreateDirectory(targetFile.DirectoryName); } catch (System.Exception) { } if (!Directory.Exists(targetFile.DirectoryName)) { LongPath.CreateDirectory(targetFile.DirectoryName); } } sftpProxy.GetFile(sf.FullName, targetFile.FullName, true); targetFile.Refresh(); if (targetFile.Exists) { targetFile.CreationTime = dateM; targetFile.LastWriteTime = dateM; targetFile.LastAccessTime = dateA; } else { #region string errorDirToFileNameExtension = ""; if (sf.Name.IndexOf(".") > -1) { errorDirToFileNameExtension = sf.Name.Substring(sf.Name.IndexOf(@".") + 1); } Thread.Sleep(2000); bool copyconfirm = true; int confirmCoount = 0; while (copyconfirm) { #region if (confirmCoount < 3) { targetFile.Refresh(); if (targetFile.Exists) { DateTime fileFirstTime = targetFile.LastWriteTime; Thread.Sleep(2000); DateTime fileSecondTime = targetFile.LastWriteTime; if (fileFirstTime.Equals(fileSecondTime)) { targetFile.CreationTime = dateM; targetFile.LastWriteTime = dateM; targetFile.LastAccessTime = dateA; copyconfirm = false; } } else { Thread.Sleep(2000); } confirmCoount++; } else { break; } #endregion } #endregion } sshlog.WriteLog(new Common.Util.SSHLog() { DateTime = DateTime.Now, LogType = Common.Util.SSHLogType.Success, Message = targetFile.FullName }); } catch (ArgumentException ae) { logger.Error("localpath:" + localPath + Environment.NewLine + MessageUtil.GetExceptionMsg(ae, "")); sshlog.WriteLog(new Common.Util.SSHLog() { DateTime = DateTime.Now, LogType = Common.Util.SSHLogType.Failure, Message = ms.monitorServerIP + ", " + sf.FullName }); } catch (System.Exception ex) { logger.Error("localpath:" + localPath + Environment.NewLine + MessageUtil.GetExceptionMsg(ex, "")); sshlog.WriteLog(new Common.Util.SSHLog() { DateTime = DateTime.Now, LogType = Common.Util.SSHLogType.Failure, Message = ms.monitorServerIP + ", " + sf.FullName }); } #endregion #endregion }