|
|
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>
|
|
|
/// 文件管理类
|
|
|
/// </summary>
|
|
|
public static class FileManager
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// 根据Xml获取文件列表<E58897>
|
|
|
/// </summary>
|
|
|
/// <param name="xmlFilePath">XML路径</param>
|
|
|
/// <returns></returns>
|
|
|
public static List<FileInfoAlias> LoadXmlFileLists(string xmlFilePath, string directory)
|
|
|
{
|
|
|
List<FileInfoAlias> fileInfos = new List<FileInfoAlias>();
|
|
|
try
|
|
|
{
|
|
|
XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<FileInfoAlias>));
|
|
|
TextReader reader = new StreamReader(xmlFilePath);
|
|
|
fileInfos = xmlSerializer.Deserialize(reader) as List<FileInfoAlias>;
|
|
|
reader.Close();
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
return fileInfos;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 根据文件列表序列号成Xml文件<E69687>
|
|
|
/// </summary>
|
|
|
/// <param name="xmlFilePath">XML路径</param>
|
|
|
/// <returns></returns>
|
|
|
public static bool SaveFileListsToXml(string xmlFilePath, string directory, List<FileInfo> fileInfos)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
|
|
|
XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<FileInfo>));
|
|
|
TextWriter writer = new StreamWriter(xmlFilePath);
|
|
|
xmlSerializer.Serialize(writer, fileInfos);
|
|
|
writer.Close();
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
private static List<FileInfoAlias> FileConvert(List<FileInfo> fileInfos)
|
|
|
{
|
|
|
List<FileInfoAlias> fileInfoAliases = new List<FileInfoAlias>();
|
|
|
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;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 获取本地文件清单
|
|
|
/// </summary>
|
|
|
/// <param name="BaseDirectory">根目录</param>
|
|
|
/// <param name="directory">目录</param>
|
|
|
/// <param name="List<FileInfo>">The file infos.</param>
|
|
|
public static List<FileInfo> GetLocalFileInfo(string BaseDirectory, string directory)
|
|
|
{
|
|
|
string currentPath = BaseDirectory + "\\";
|
|
|
List<FileInfo> fileInfos = new List<FileInfo>();
|
|
|
|
|
|
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<FileInfo>());
|
|
|
return fileInfos;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 获取本地文件清单
|
|
|
/// </summary>
|
|
|
/// <param name="directory">目录</param>
|
|
|
/// <param name="List<FileInfo>">The file infos.</param>
|
|
|
public static List<FileInfo> GetLocalFileInfo(string directory)
|
|
|
{
|
|
|
return GetLocalFileInfo(AppDomain.CurrentDomain.BaseDirectory, directory);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 根据 FILE SERVER 上的文件列表生成本地的文件列表
|
|
|
/// </summary>
|
|
|
/// <param name="serverInfos"></param>
|
|
|
public static List<FileInfo> GetLocalFileInfo(List<FileInfo> serverInfos)
|
|
|
{
|
|
|
string currentPath = AppDomain.CurrentDomain.BaseDirectory;
|
|
|
List<FileInfo> LocalInfos = new List<FileInfo>();
|
|
|
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;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 根据 FILE SERVER 上的文件列表比较本机上的文件列表,获取要更新的文件清单
|
|
|
/// </summary>
|
|
|
/// <param name="serverInfos">FILE SERVER 上的文件列表</param>
|
|
|
/// <param name="localInfos">本机生成的文件列表</param>
|
|
|
/// <returns>需要更新的文件列表</returns>
|
|
|
public static List<FileInfo> GetUpdateFileLists(List<FileInfo> serverInfos, List<FileInfo> localInfos)
|
|
|
{
|
|
|
List<FileInfo> updateFileLists = new List<FileInfo>();
|
|
|
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
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// 文件名称
|
|
|
/// </summary>
|
|
|
public string FileName { get; set; }
|
|
|
/// <summary>
|
|
|
/// 文件大小
|
|
|
/// </summary>
|
|
|
public long Size { get; set; }
|
|
|
/// <summary>
|
|
|
/// 文件最后修改时间
|
|
|
/// </summary>
|
|
|
public DateTime LastWriteTime { get; set; }
|
|
|
/// <summary>
|
|
|
/// 文件版本
|
|
|
/// </summary>
|
|
|
public string Version { get; set; }
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|