using System; using System.Collections.Generic; using System.Text; using System.Xml.Serialization; using System.IO; using System.Diagnostics; namespace Estsh.Client.Common.FileManager { /// /// ゅン獺恨瞶摸 /// public static class FileManager { /// /// 眖 XML ゅンい更ゅン獺 /// /// XML ゅン隔畖 /// 更Θ true public static FileInfoAliases LoadXmlFileLists(string xmlFilePath) { FileInfoAliases fileInfoAliases = new FileInfoAliases(); try { XmlSerializer xmlSerializer = new XmlSerializer(typeof(FileInfoAliases)); TextReader reader = new StreamReader(xmlFilePath); fileInfoAliases = xmlSerializer.Deserialize(reader) as FileInfoAliases; reader.Close(); } catch (Exception ex) { return null; } return fileInfoAliases; } /// /// 玂ゅン獺栋 XML ゅン /// /// XML ゅン隔畖 /// 玂Θ true public static bool SaveFileListsToXml(string xmlFilePath, FileInfoAliases fileInfos) { try { XmlSerializer xmlSerializer = new XmlSerializer(typeof(FileInfoAliases)); TextWriter writer = new StreamWriter(xmlFilePath); xmlSerializer.Serialize(writer, fileInfos); writer.Close(); } catch (Exception ex) { return false; } return true; } public static void GetLocalFileInfo(string BaseDirectory, string directory, ref FileInfoAliases fileInfos) { string currentPath = BaseDirectory + "\\"; if (!Directory.Exists(currentPath + directory)) { return; } FileInfoAlias localInfo; DirectoryInfo dirInfo = new DirectoryInfo(currentPath + directory); System.IO.FileInfo[] fi = dirInfo.GetFiles(); foreach (System.IO.FileInfo info in fi) { localInfo = new FileInfoAlias(); localInfo.Name = directory + "/" + info.Name; localInfo.Size = info.Length; localInfo.LastWriteTime = info.LastWriteTime; System.Diagnostics.FileVersionInfo fvi = System.Diagnostics.FileVersionInfo.GetVersionInfo(info.FullName); localInfo.Version = fvi.FileVersion; fileInfos.Infos.Add(localInfo); } DirectoryInfo[] subDirInfo = dirInfo.GetDirectories(); // 患耴筂菌┮Τヘ魁 foreach (DirectoryInfo tempDirInfo in subDirInfo) { GetLocalFileInfo(BaseDirectory, directory + "/" + tempDirInfo.Name, ref fileInfos); } } /// /// 根据 FILE SERVER 上的文件列表生成本地的文件列表 /// /// public static FileInfoAliases GetLocalFileInfo(FileInfoAliases serverInfos) { string currentPath = AppDomain.CurrentDomain.BaseDirectory; FileInfoAliases LocalInfos = new FileInfoAliases(); foreach (var fi in serverInfos.Infos) { string LocalFileName = Path.Combine(currentPath, Path.GetFileName(fi.Name)); if (File.Exists(LocalFileName)) { System.IO.FileInfo lfi = new System.IO.FileInfo(LocalFileName); FileInfoAlias LocalFileInfo = new FileInfoAlias(); LocalFileInfo.Name = lfi.Name; LocalFileInfo.Size = lfi.Length; LocalFileInfo.LastWriteTime = lfi.LastWriteTime; System.Diagnostics.FileVersionInfo fvi = System.Diagnostics.FileVersionInfo.GetVersionInfo(lfi.FullName); LocalFileInfo.Version = fvi.FileVersion; LocalInfos.Infos.Add(LocalFileInfo); } } return LocalInfos; } /// /// 莉セ﹚ゅン┮Τゅン獺(ヘ魁) /// /// ゅンЖ嘿 /// The file infos. public static void GetLocalFileInfo(string directory, ref FileInfoAliases fileInfos) { string currentPath = AppDomain.CurrentDomain.BaseDirectory + "\\"; if (!Directory.Exists(currentPath + directory)) { return; } FileInfoAlias localInfo; DirectoryInfo dirInfo = new DirectoryInfo(currentPath + directory); System.IO.FileInfo[] fi = dirInfo.GetFiles(); foreach (System.IO.FileInfo info in fi) { localInfo = new FileInfoAlias(); localInfo.Name = directory + "/" + info.Name; localInfo.Size = info.Length; localInfo.LastWriteTime = info.LastWriteTime; System.Diagnostics.FileVersionInfo fvi = System.Diagnostics.FileVersionInfo.GetVersionInfo(info.FullName); localInfo.Version = fvi.FileVersion; fileInfos.Infos.Add(localInfo); } DirectoryInfo[] subDirInfo = dirInfo.GetDirectories(); // 患耴筂菌┮Τヘ魁 foreach (DirectoryInfo tempDirInfo in subDirInfo) { GetLocalFileInfo(directory + "/" + tempDirInfo.Name, ref fileInfos); } } /// /// 根据 FILE SERVER 上的文件列表比较本机上的文件列表,获取要更新的文件清单 /// /// FILE SERVER 上的文件列表 /// 本机生成的文件列表 /// 需要更新的文件列表 public static FileInfoAliases GetUpdateFileLists(FileInfoAliases serverInfos, FileInfoAliases localInfos) { FileInfoAliases updateFileLists = new FileInfoAliases(); bool NeedUpdateFlag = false; foreach (var tempServerInfo in serverInfos.Infos) { NeedUpdateFlag = true; foreach (var tempLocalInfo in localInfos.Infos) { // 根据相同的文件名进行比较 if (Path.GetFileName(tempLocalInfo.Name) == Path.GetFileName(tempServerInfo.Name)) { // 比较文件属性 if (tempLocalInfo.CompareTo(tempServerInfo) >= 0) { NeedUpdateFlag = false; break; } } } // 需要更新 if (NeedUpdateFlag) { updateFileLists.Infos.Add(tempServerInfo); } } return updateFileLists; } } }