|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Xml.Serialization;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using System.Diagnostics;
|
|
|
|
|
|
|
|
|
|
namespace Estsh.Client.Common.FileManager
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD>H<EFBFBD><48><EFBFBD>z<DEB2><7A>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static class FileManager
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20>q XML <20><><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>H<EFBFBD><48>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="xmlFilePath">XML <20><><EFBFBD><EFBFBD><F3AABAB8>|</param>
|
|
|
|
|
/// <returns><3E>[<5B><><EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD>^ true</returns>
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20>O<EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD>H<EFBFBD><48><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><58> XML <20><><EFBFBD><EFBFBD>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="xmlFilePath">XML <20><><EFBFBD><EFBFBD><F3AABAB8>|</param>
|
|
|
|
|
/// <returns><3E>O<EFBFBD>s<EFBFBD><73><EFBFBD>\<5C><><EFBFBD>^ true</returns>
|
|
|
|
|
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();
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>k<EFBFBD>M<EFBFBD><4D><EFBFBD>Ҧ<EFBFBD><D2A6><EFBFBD><EFBFBD>l<EFBFBD>ؿ<EFBFBD>
|
|
|
|
|
foreach (DirectoryInfo tempDirInfo in subDirInfo)
|
|
|
|
|
{
|
|
|
|
|
GetLocalFileInfo(BaseDirectory, directory + "/" + tempDirInfo.Name, ref fileInfos);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20><><EFBFBD><EFBFBD> FILE SERVER <20>ϵ<EFBFBD><CFB5>ļ<EFBFBD><C4BC>б<EFBFBD><D0B1><EFBFBD><EFBFBD>ɱ<EFBFBD><C9B1>ص<EFBFBD><D8B5>ļ<EFBFBD><C4BC>б<EFBFBD>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="serverInfos"></param>
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a<EFBFBD><61><EFBFBD>w<EFBFBD><77><EFBFBD><EFBFBD><EFBFBD>U<EFBFBD>Ҧ<EFBFBD><D2A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>H<EFBFBD><48>(<28>]<5D>t<EFBFBD>l<EFBFBD>ؿ<EFBFBD>)
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="directory"><3E><><EFBFBD><EFBFBD><F3A7A8AA>W<EFBFBD><57></param>
|
|
|
|
|
/// <param name="fileInfos">The file infos.</param>
|
|
|
|
|
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();
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>k<EFBFBD>M<EFBFBD><4D><EFBFBD>Ҧ<EFBFBD><D2A6><EFBFBD><EFBFBD>l<EFBFBD>ؿ<EFBFBD>
|
|
|
|
|
foreach (DirectoryInfo tempDirInfo in subDirInfo)
|
|
|
|
|
{
|
|
|
|
|
GetLocalFileInfo(directory + "/" + tempDirInfo.Name, ref fileInfos);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20><><EFBFBD><EFBFBD> FILE SERVER <20>ϵ<EFBFBD><CFB5>ļ<EFBFBD><C4BC>б<EFBFBD><D0B1>Ƚϱ<C8BD><CFB1><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>ļ<EFBFBD><C4BC>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>ȡҪ<C8A1><D2AA><EFBFBD>µ<EFBFBD><C2B5>ļ<EFBFBD><C4BC>嵥
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="serverInfos">FILE SERVER <20>ϵ<EFBFBD><CFB5>ļ<EFBFBD><C4BC>б<EFBFBD></param>
|
|
|
|
|
/// <param name="localInfos"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><C9B5>ļ<EFBFBD><C4BC>б<EFBFBD></param>
|
|
|
|
|
/// <returns><3E><>Ҫ<EFBFBD><D2AA><EFBFBD>µ<EFBFBD><C2B5>ļ<EFBFBD><C4BC>б<EFBFBD></returns>
|
|
|
|
|
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)
|
|
|
|
|
{
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>бȽ<D0B1>
|
|
|
|
|
if (Path.GetFileName(tempLocalInfo.Name) == Path.GetFileName(tempServerInfo.Name))
|
|
|
|
|
{
|
|
|
|
|
// <20>Ƚ<EFBFBD><C8BD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if (tempLocalInfo.CompareTo(tempServerInfo) >= 0)
|
|
|
|
|
{
|
|
|
|
|
NeedUpdateFlag = false;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
|
|
|
|
if (NeedUpdateFlag)
|
|
|
|
|
{
|
|
|
|
|
updateFileLists.Infos.Add(tempServerInfo);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return updateFileLists;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|