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; }
}
}
}