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