using System.Collections.Generic; using System.IO; namespace Wayne.Lib.IO { internal class SafeFileInfo { #region Const fields public const string TmpFileExtension = "wayneTemp"; public const string OldFileExtension = "wayneOld"; #endregion #region Fields string originalFileName; #endregion #region Construction private SafeFileInfo(string originalFileName) { this.originalFileName = originalFileName; } #endregion #region Properties public string TempFileName { get { return originalFileName + "." + TmpFileExtension; } } public bool TempFileExists { get { return File.Exists(TempFileName); } } public string OldFileName { get { return originalFileName + "." + OldFileExtension; } } public bool OldFileExist { get { return File.Exists(OldFileName); } } public string OriginalFileName { get { return originalFileName; } } public bool OriginalFileExists { get { return File.Exists(originalFileName); } } #endregion #region Static methods internal static SafeFileInfo FromOriginalFileName(string originalFileNameAndPath) { return new SafeFileInfo(originalFileNameAndPath); } internal static SafeFileInfo FromTempFileName(string tempFileName) { return new SafeFileInfo(Path.GetFileNameWithoutExtension(tempFileName)); } internal static SafeFileInfo FromOldFileName(string originalFileName) { return new SafeFileInfo(Path.GetFileNameWithoutExtension(originalFileName)); } public static SafeFileInfo[] GetFiles(IFileSupport fileSupport, string folderPath, string pattern) { List safeFileList = new List(); foreach (string fullFileName in fileSupport.GetFiles(folderPath, pattern)) { SafeFileInfo safeFile = FromOriginalFileName(fullFileName); safeFileList.Add(safeFile); } foreach (string fullFileName in fileSupport.GetFiles(folderPath, pattern + "." + TmpFileExtension)) { SafeFileInfo safeFile = FromTempFileName(fullFileName); if (!SafeFileInfoListContains(safeFileList, safeFile)) safeFileList.Add(safeFile); } foreach (string fullFileName in fileSupport.GetFiles(folderPath, pattern + "." + OldFileExtension)) { SafeFileInfo safeFile = FromOldFileName(fullFileName); if (!SafeFileInfoListContains(safeFileList, safeFile)) safeFileList.Add(safeFile); } return safeFileList.ToArray(); } private static bool SafeFileInfoListContains(List safeFileList, SafeFileInfo safeFile) { foreach (SafeFileInfo file in safeFileList) if (file.originalFileName.Equals(safeFile.originalFileName)) return true; return false; } #endregion } }