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路径 /// public static List LoadXmlFileLists(string xmlFilePath, string directory) { List fileInfos = new List(); try { XmlSerializer xmlSerializer = new XmlSerializer(typeof(List)); TextReader reader = new StreamReader(xmlFilePath); fileInfos = xmlSerializer.Deserialize(reader) as List; reader.Close(); } catch (Exception ex) { return null; } return fileInfos; } /// /// 根据文件列表序列号成Xml文件 /// /// XML路径 /// public static bool SaveFileListsToXml(string xmlFilePath, string directory, List fileInfos) { try { XmlSerializer xmlSerializer = new XmlSerializer(typeof(List)); TextWriter writer = new StreamWriter(xmlFilePath); xmlSerializer.Serialize(writer, fileInfos); writer.Close(); } catch (Exception ex) { return false; } return true; } private static List FileConvert(List fileInfos) { List fileInfoAliases = new List(); FileInfoAlias fileInfoAlias; foreach (var fileInfo in fileInfos) { fileInfoAlias = new FileInfoAlias(); fileInfoAlias.FileName = fileInfo.Name; fileInfoAlias.Size = fileInfo.Length; fileInfoAlias.LastWriteTime = fileInfo.LastWriteTime; if (FileVersionInfo.GetVersionInfo(fileInfo.FullName) != null) { fileInfoAlias.Version = FileVersionInfo.GetVersionInfo(fileInfo.FullName).FileVersion; } fileInfoAliases.Add(fileInfoAlias); } return fileInfoAliases; } /// /// 获取本地文件清单 /// /// 根目录 /// 目录 /// The file infos. public static List GetLocalFileInfo(string BaseDirectory, string directory) { string currentPath = BaseDirectory + "\\"; List fileInfos = new List(); if (!Directory.Exists(currentPath + directory)) { return fileInfos; } DirectoryInfo dirInfo = new DirectoryInfo(currentPath + directory); DirectoryInfo[] subDirInfo = dirInfo.GetDirectories(); // 递归调用 foreach (DirectoryInfo tempDirInfo in subDirInfo) { fileInfos.AddRange(GetLocalFileInfo(BaseDirectory, directory + "/" + tempDirInfo.Name)); } fileInfos.AddRange(dirInfo.GetFiles().ToList()); return fileInfos; } /// /// 获取本地文件清单 /// /// 目录 /// The file infos. public static List GetLocalFileInfo(string directory) { return GetLocalFileInfo(AppDomain.CurrentDomain.BaseDirectory, directory); } /// /// 根据 FILE SERVER 上的文件列表生成本地的文件列表 /// /// public static List GetLocalFileInfo(List serverInfos) { string currentPath = AppDomain.CurrentDomain.BaseDirectory; List LocalInfos = new List(); foreach (FileInfo fi in serverInfos) { string LocalFileName = Path.Combine(currentPath, Path.GetFileName(fi.Name)); if (File.Exists(LocalFileName)) { LocalInfos.Add(new FileInfo(LocalFileName)); } } return LocalInfos; } /// /// 根据 FILE SERVER 上的文件列表比较本机上的文件列表,获取要更新的文件清单 /// /// FILE SERVER 上的文件列表 /// 本机生成的文件列表 /// 需要更新的文件列表 public static List GetUpdateFileLists(List serverInfos, List localInfos) { List updateFileLists = new List(); bool NeedUpdateFlag = false; foreach (FileInfo tempServerInfo in serverInfos) { NeedUpdateFlag = true; foreach (FileInfo tempLocalInfo in localInfos) { // 根据相同的文件名进行比较 if (Path.GetFileName(tempLocalInfo.Name) == Path.GetFileName(tempServerInfo.Name)) { // 比较文件属性 if (tempLocalInfo.CompareTo(tempServerInfo) >= 0) { NeedUpdateFlag = false; break; } } } // 需要更新 if (NeedUpdateFlag) { updateFileLists.Add(tempServerInfo); } } return updateFileLists; } [Serializable] class FileInfoAlias { /// /// 文件名称 /// public string FileName { get; set; } /// /// 文件大小 /// public long Size { get; set; } /// /// 文件最后修改时间 /// public DateTime LastWriteTime { get; set; } /// /// 文件版本 /// public string Version { get; set; } } } }