205 lines
5.9 KiB
C#
205 lines
5.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Collections;
|
|
using System.IO;
|
|
using System.Runtime.Serialization;
|
|
using System.Runtime.Serialization.Formatters.Binary;
|
|
|
|
|
|
namespace ITFInstaller
|
|
{
|
|
[Serializable()]
|
|
public class ElementFat : ISerializable
|
|
{
|
|
public string m_Filename = "";
|
|
public DateTime m_Time = DateTime.MinValue;
|
|
public UInt32 m_Version = 0;
|
|
public UInt32 m_Size = 0;
|
|
|
|
public ElementFat()
|
|
{
|
|
|
|
}
|
|
|
|
public ElementFat(SerializationInfo info, StreamingContext ctxt)
|
|
{
|
|
this.m_Filename = (string)info.GetValue("filename", typeof(string));
|
|
this.m_Time = (DateTime)info.GetValue("datetime", typeof(DateTime));
|
|
this.m_Version = (UInt32)info.GetValue("version", typeof(UInt32));
|
|
this.m_Size = (UInt32)info.GetValue("size", typeof(UInt32));
|
|
}
|
|
|
|
public void GetObjectData(SerializationInfo info, StreamingContext ctxt)
|
|
{
|
|
info.AddValue("filename", this.m_Filename);
|
|
info.AddValue("datetime", this.m_Time);
|
|
info.AddValue("version", this.m_Version);
|
|
info.AddValue("size", this.m_Size);
|
|
}
|
|
}
|
|
|
|
|
|
[Serializable()]
|
|
public class ObjectToSerialize : ISerializable
|
|
{
|
|
UInt32 version;
|
|
private List<ElementFat> elementsFat;
|
|
|
|
public List<ElementFat> ElementsFat
|
|
{
|
|
get { return this.elementsFat; }
|
|
set { this.elementsFat = value; }
|
|
}
|
|
|
|
public ObjectToSerialize()
|
|
{
|
|
}
|
|
|
|
public ObjectToSerialize(SerializationInfo info, StreamingContext ctxt)
|
|
{
|
|
this.version = (UInt32)info.GetValue("version", typeof(UInt32));
|
|
this.elementsFat = (List<ElementFat>)info.GetValue("ElementFats", typeof(List<ElementFat>));
|
|
}
|
|
|
|
public void GetObjectData(SerializationInfo info, StreamingContext ctxt)
|
|
{
|
|
info.AddValue("version", version);
|
|
info.AddValue("ElementFats", this.elementsFat);
|
|
}
|
|
}
|
|
|
|
public class VirtualFat
|
|
{
|
|
|
|
public VirtualFat()
|
|
{
|
|
|
|
}
|
|
|
|
public void RemoveFile(string _filename)
|
|
{
|
|
m_FatTable.Remove(_filename);
|
|
}
|
|
|
|
public List<String> Clean(Hashtable _table)
|
|
{
|
|
List<String> fileToClean = new List<String>();
|
|
foreach (DictionaryEntry entry in m_FatTable)
|
|
{
|
|
if (!_table.ContainsKey(entry.Key))
|
|
{
|
|
//delete
|
|
fileToClean.Add(entry.Key.ToString());
|
|
}
|
|
}
|
|
|
|
return fileToClean;
|
|
}
|
|
|
|
public void DeSerialize(string _filename)
|
|
{
|
|
List<ElementFat> elementsFat = new List<ElementFat>();
|
|
ObjectToSerialize objectToSerialize = new ObjectToSerialize();
|
|
|
|
Serializer serializer = new Serializer();
|
|
objectToSerialize = serializer.DeSerializeObject(_filename);
|
|
elementsFat = objectToSerialize.ElementsFat;
|
|
|
|
m_FatTable.Clear();
|
|
foreach (ElementFat elementFat in elementsFat)
|
|
{
|
|
m_FatTable[elementFat.m_Filename] = elementFat;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
public void Serialize(string _filename)
|
|
{
|
|
|
|
List<ElementFat> elementsFat = new List<ElementFat>();
|
|
|
|
foreach (DictionaryEntry entry in m_FatTable)
|
|
{
|
|
elementsFat.Add((ElementFat)entry.Value);
|
|
}
|
|
|
|
ObjectToSerialize objectToSerialize = new ObjectToSerialize();
|
|
objectToSerialize.ElementsFat = elementsFat;
|
|
|
|
Serializer serializer = new Serializer();
|
|
|
|
|
|
serializer.SerializeObject(_filename, objectToSerialize);
|
|
}
|
|
|
|
public bool isFileMatch(string _filename,DateTime _srcTime,UInt32 _version,UInt32 _size)
|
|
{
|
|
ElementFat elFat = (ElementFat)m_FatTable[_filename];
|
|
if (elFat == null)
|
|
return false;
|
|
|
|
if (_version != elFat.m_Version)
|
|
return false;
|
|
|
|
|
|
if (_size != elFat.m_Size)
|
|
return false;
|
|
|
|
TimeSpan ts = (elFat.m_Time - _srcTime);
|
|
double totalSeconds = Math.Abs(ts.TotalSeconds);
|
|
bool bSkipFile = (totalSeconds >= 0 && totalSeconds <= 2);
|
|
return bSkipFile;
|
|
|
|
}
|
|
|
|
|
|
public bool isFileExists(string _filename)
|
|
{
|
|
if (m_FatTable.ContainsKey(_filename))
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
public void addFile(string _filename,UInt32 _version, DateTime _time,UInt32 _size)
|
|
{
|
|
ElementFat elementFat = new ElementFat();
|
|
elementFat.m_Filename = _filename;
|
|
elementFat.m_Version = _version;
|
|
elementFat.m_Time = _time;
|
|
elementFat.m_Size = _size;
|
|
m_FatTable[_filename] = elementFat;
|
|
}
|
|
|
|
protected Hashtable m_FatTable = new Hashtable();
|
|
}
|
|
|
|
|
|
public class Serializer
|
|
{
|
|
public Serializer()
|
|
{
|
|
}
|
|
|
|
public void SerializeObject(string filename, ObjectToSerialize objectToSerialize)
|
|
{
|
|
Stream stream = File.Open(filename, FileMode.Create);
|
|
BinaryFormatter bFormatter = new BinaryFormatter();
|
|
bFormatter.Serialize(stream, objectToSerialize);
|
|
stream.Close();
|
|
}
|
|
|
|
public ObjectToSerialize DeSerializeObject(string filename)
|
|
{
|
|
ObjectToSerialize objectToSerialize;
|
|
Stream stream = File.Open(filename, FileMode.Open);
|
|
BinaryFormatter bFormatter = new BinaryFormatter();
|
|
objectToSerialize = (ObjectToSerialize)bFormatter.Deserialize(stream);
|
|
stream.Close();
|
|
return objectToSerialize;
|
|
}
|
|
}
|
|
}
|