You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

200 lines
6.7 KiB
C#

2 years ago
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><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
public static class FileManager
{
/// <summary>
/// <20><><EFBFBD><EFBFBD>Xml<6D><6C>ȡ<EFBFBD>ļ<EFBFBD><C4BC>б<EFBFBD><D0B1><EFBFBD>
/// </summary>
/// <param name="xmlFilePath">XML·<4C><C2B7></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>
/// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>б<EFBFBD><D0B1><EFBFBD><EFBFBD>кų<D0BA>Xml<6D>ļ<EFBFBD><C4BC><EFBFBD>
/// </summary>
/// <param name="xmlFilePath">XML·<4C><C2B7></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>
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>
/// </summary>
/// <param name="BaseDirectory"><3E><>Ŀ¼</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();
// <20>ݹ<EFBFBD><DDB9><EFBFBD><EFBFBD><EFBFBD>
foreach (DirectoryInfo tempDirInfo in subDirInfo)
{
fileInfos.AddRange(GetLocalFileInfo(BaseDirectory, directory + "/" + tempDirInfo.Name));
}
fileInfos.AddRange(dirInfo.GetFiles().ToList<FileInfo>());
return fileInfos;
}
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>
/// </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>
/// <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 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>
/// <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 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)
{
// <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.Add(tempServerInfo);
}
}
return updateFileLists;
}
[Serializable]
class FileInfoAlias
{
/// <summary>
/// <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
public string FileName { get; set; }
/// <summary>
/// <20>ļ<EFBFBD><C4BC><EFBFBD>С
/// </summary>
public long Size { get; set; }
/// <summary>
/// <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>ʱ<EFBFBD><CAB1>
/// </summary>
public DateTime LastWriteTime { get; set; }
/// <summary>
/// <20>ļ<EFBFBD><C4BC>
/// </summary>
public string Version { get; set; }
}
}
}