public CSyncFile(string[] aFullPathSrc, string RootFolderSrc, CFtpInfoSync[] aFtpInfo, SyncTypes SyncType, bool MinifyJs, string[] aFullPathReferencingJs, string[] aJsFullPathRefered, DateTime DateTimeAfter, string LogFolder) { this._aFullPathSrc = aFullPathSrc; this._RootFolderSrc = RootFolderSrc; this._aFtpInfoDest = aFtpInfo; this._SyncType = SyncType; this._MinifyJs = MinifyJs; if (aFullPathReferencingJs.Length > 0) { this._aFullPathReferencingJs = aFullPathReferencingJs; } if (aJsFullPathRefered.Length > 0) { this._aJsFullPathRefered = aJsFullPathRefered; } this._DateTimeAfter = DateTimeAfter; this._LogFolder = LogFolder; //{ this.mWatcher.IncludeSubdirectories = true; this.mWatcher.EnableRaisingEvents = this.mEnableWatcher; this.mWatcher.NotifyFilter = NotifyFilters.DirectoryName | NotifyFilters.FileName | NotifyFilters.CreationTime | NotifyFilters.LastWrite; this.mWatcher.Path = RootFolderSrc; this.mWatcher.Changed += new FileSystemEventHandler(mWatcher_Changed); this.mWatcher.Created += new FileSystemEventHandler(mWatcher_Created); this.mWatcher.Renamed += new RenamedEventHandler(mWatcher_Renamed); this.mWatcher.Deleted += new FileSystemEventHandler(mWatcher_Deleted); //} _aFtp = new CFtp2[aFtpInfo.Length]; for (int i = 0; i < _aFtp.Length; i++) { _aFtp[i] = new CFtp2(aFtpInfo[i]); _aFtp[i].BeforeDirectoryUpload += new EventHandler <CBeforeDirectoryUploadEventArgs>(ftp_BeforeDirectoryUpload); _aFtp[i].BeforeFileUpload += new EventHandler <CBeforeFileUploadEventArgs>(ftp_BeforeFileUpload); _aFtp[i].AfterFileUpload += new EventHandler <CAfterFileUploadEventArgs>(ftp_AfterFileUpload); _aFtp[i].FileUploadFailed += new EventHandler <CFileUploadFailedEventArgs>(ftp_FileUploadFailed); } _DestType = DestTypes.Ftp; }
private List <Tuple <string, string, CFtpInfoSync> > GetPathAndHtmlAndFtpInfoDest(string[] aFullPathReferencingJs, FileInfo fiSrc) { List <Tuple <string, string, CFtpInfoSync> > tpPathAndHtml = new List <Tuple <string, string, CFtpInfoSync> >(); if (aFullPathReferencingJs.Length == 0) { return(tpPathAndHtml); } List <Tuple <string, string, CFtpInfoSync> > tpFullPathReferencingDest = GetFullPathReferencingDest(aFullPathReferencingJs); if (tpFullPathReferencingDest.Count == 0) { return(tpPathAndHtml); } foreach (Tuple <string, string, CFtpInfoSync> kv in tpFullPathReferencingDest) { string FullPathSrc = kv.Item1; string FullPathDest = kv.Item2; CFtpInfoSync FtpInfo = kv.Item3; string Html = ""; if (_DestType == DestTypes.FileSystem) { if (!File.Exists(FullPathDest)) { continue; } Html = CFile.GetTextInFile(FullPathDest); } else if (_DestType == DestTypes.Ftp) { CFtp2 Ftp = new CFtp2(FtpInfo); if (!Ftp.FileExists(FullPathDest)) { continue; } string TmpFullPath = CFile.GetTempFileName(); Ftp.DownloadFile(TmpFullPath, FullPathDest); Html = CFile.GetTextInFile(TmpFullPath); } List <string> aHtmlNew = new List <string>(); string Pattern = string.Format(_PatternUrlSpecific, fiSrc.Name.Replace(".", "\\.")); Regex r = new Regex(Pattern, CRegex.Options.Compiled_Multiline_IgnoreCase_IgnorePatternWhitespace); bool IsFound = false; foreach (CMatchInfo mi in CRegex.GetMatchResult(r, Html)) { aHtmlNew.Add(mi.ValueBeforeMatch); Match m = mi.Match; if (m == null) { break; } string Url = m.Groups["Url"].Value; CQueryString qs = new CQueryString(Url); //Commented because v parameter can be setted to empty when referencing file uploaded alone. //When that situation, v parameter will get value of 1 again. //qs["v"] = (CFindRep.IfNotNumberThen0(qs["v"]) + 1).ToString(); qs["v"] = DateTime.Now.ToString(CConst.Format_yyyyMMddHHmmss); aHtmlNew.Add(m.Value.Replace(m.Groups["Url"].Value, qs.PathAndQuery)); IsFound = true; } if (IsFound) { string HtmlNew = string.Join("", aHtmlNew); tpPathAndHtml.Add(new Tuple <string, string, CFtpInfoSync>(FullPathDest, HtmlNew, FtpInfo)); } } return(tpPathAndHtml); }
private bool IsValidForSync(FileInfo fiSrc, FileInfo fiDest, bool IsFtp, out string FullPathSrcNewIs) { FullPathSrcNewIs = ""; bool IsFile = !CFile.GetIsFolder(fiSrc); bool IsValid = true; if (IsFile) { if (IsValid) { IsValid = IsValidExtension(fiSrc); } if (IsFtp) { if (_SyncType == SyncTypes.CompareTimeBetweenSrcAndDest) { throw new Exception(string.Format("SyncType:{0} disallowed in Ftp.", _SyncType)); } //숨김 속성인 경우 new FileStream 사용할 때 읽지 못함. if (IsValid) { IsValid = ((fiSrc.Attributes & FileAttributes.Hidden) != FileAttributes.Hidden); } if (IsValid) { IsValid = (fiSrc.LastWriteTime > _DateTimeAfter); } } else { if (_SyncType == SyncTypes.CompareTimeBetweenSrcAndDest) { if (fiDest != null) { DateTime DateSrc = fiSrc.LastWriteTime; DateTime DateDest = fiDest.LastWriteTime; long SizeSrc = fiSrc.Length; long SizeDest = fiDest.Length; if (IsValid) { IsValid = ((DateSrc != DateDest) || (SizeSrc != SizeDest)); } } } else { if (IsValid) { IsValid = (fiSrc.LastWriteTime > _DateTimeAfter); } } } } else { if (IsValid) { IsValid = IsValidFolder(fiSrc); } } if (IsValid) { if (this._MinifyJs && (string.Compare(fiSrc.Extension, ".js", true) == 0)) { #if !DotNet35 string JsSource = CFile.GetTextInFile(fiSrc.FullName); Minifier mf = new Minifier(); string JsSourceMinified = mf.MinifyJavaScript(JsSource); FullPathSrcNewIs = CFile.GetTempFileName(fiSrc.Extension); CFile.WriteTextToFile(FullPathSrcNewIs, JsSourceMinified); #else throw new Exception(".Net 3.5 does not support Minifier."); #endif } if ((this._aJsFullPathRefered != null) && (this._aJsFullPathRefered.Length > 0)) { if (CArray.IndexOf(this._aJsFullPathRefered, fiSrc.FullName, true) != -1) { List <Tuple <string, string, CFtpInfoSync> > tpPathAndHtml = GetPathAndHtmlAndFtpInfoDest(this._aFullPathReferencingJs, fiSrc); foreach (Tuple <string, string, CFtpInfoSync> tp in tpPathAndHtml) { string FullPathDest = tp.Item1; string Html = tp.Item2; CFtpInfoSync FtpInfo = tp.Item3; if (_DestType == DestTypes.FileSystem) { CFile.WriteTextToFile(FullPathDest, Html); } else { string TmpFullPath = CFile.GetTempFileName(); CFile.WriteTextToFile(TmpFullPath, Html); CFtp2 Ftp = new CFtp2(FtpInfo); Ftp.UploadFile(TmpFullPath, FullPathDest); } } } else if (CArray.IndexOf(this._aFullPathReferencingJs, fiSrc.FullName, true) != -1) { for (int i = 0; i < this._aRootFolderDest.Length; i++) { string HtmlSrc = CFile.GetTextInFile(fiSrc.FullName); string HtmlDest = ""; string FullPathDest = ""; string FullUrlDest = ""; if (_DestType == DestTypes.FileSystem) { FullPathDest = CPath.GetFullPathDest(this._RootFolderSrc, this._aRootFolderDest[i], fiSrc.FullName); HtmlDest = CFile.GetTextInFile(FullPathDest); } else { CFtp2 Ftp = new CFtp2(this._aFtpInfoDest[i]); FullUrlDest = CUrl.GetFullUrlDest(this._RootFolderSrc, this._aRootFolderDest[i], fiSrc.FullName); HtmlDest = Ftp.GetText(FullUrlDest); } string HtmlSrcNew = GetHtmlVersionReplaced(HtmlSrc, HtmlDest); if (string.IsNullOrEmpty(HtmlSrcNew)) { continue; } FullPathSrcNewIs = CFile.GetTempFileName(fiSrc.Extension); CFile.WriteTextToFile(FullPathSrcNewIs, HtmlSrcNew); } } } } return(IsValid); }
/// <summary> /// 설정된 조건에 따라 원본 폴더의 모든 파일을 대상 폴더에 복사함. /// </summary> public void CopyAll() { string FolderSrc = this._RootFolderSrc; if (_DestType == DestTypes.FileSystem) { List <string> aDirectoryChecked = new List <string>(); for (int i = 0, i2 = this._aRootFolderDest.Length; i < i2; i++) { if (this._aFullPathSrc != null) { for (int j = 0; j < this._aFullPathSrc.Length; j++) { string FullPathSrc = this._aFullPathSrc[j]; string FullPathDest = CPath.GetFullPathDest(FolderSrc, this._aRootFolderDest[i], FullPathSrc); string FolderDest = CPath.GetFolderName(FullPathDest); if (aDirectoryChecked.IndexOf(FolderDest) == -1) { if (!Directory.Exists(FolderDest)) { Directory.CreateDirectory(FolderDest); } aDirectoryChecked.Add(FolderDest); } _File.CopyFile(FullPathSrc, FullPathDest); } } else { _File.CopyDirectory(FolderSrc, this._aRootFolderDest[i]); } } } else if (_DestType == DestTypes.Ftp) { for (int i = 0, i2 = this._aFtpInfoDest.Length; i < i2; i++) { CFtp2 FtpCur = _aFtp[i]; CFtpInfoSync InfoSync = (CFtpInfoSync)FtpCur.Info; List <string> aDirectoryChecked = new List <string>(); if (this._aFullPathSrc != null) { for (int j = 0; j < this._aFullPathSrc.Length; j++) { string FullPathSrc = this._aFullPathSrc[j]; string FullPathDest = CUrl.GetFullUrlDest(FolderSrc, InfoSync.Folder, FullPathSrc); string FolderDest = CUrl.GetDirectoryName(FullPathDest); if (aDirectoryChecked.IndexOf(FolderDest) == -1) { if (!FtpCur.DirectoryExists(FolderDest)) { FtpCur.CreateDirectory(FolderDest); } aDirectoryChecked.Add(FolderDest); } FtpCur.UploadFile(FullPathSrc, FullPathDest); } } else { FtpCur.UploadDirectory(FolderSrc, InfoSync.Folder); } } } }