ln.types/serialize/DiskObject.cs

69 lines
1.9 KiB
C#

// /**
// * File: DiskObject.cs
// * Author: haraldwolff
// *
// * This file and it's content is copyrighted by the Author and / or copyright holder.
// * Any use wihtout proper permission is illegal and may lead to legal actions.
// *
// *
// **/
using System;
using System.IO;
namespace ln.types.serialize
{
public class DiskObject<T>
{
public String FileName { get; private set; }
public T Instance { get; set; }
public DiskObject(string fileName)
{
FileName = fileName;
Load();
}
public DiskObject(string fileName,T instance)
:this(fileName)
{
Instance = instance;
}
public void Load()
{
if (File.Exists(FileName))
{
using (FileStream fileStream = new FileStream(FileName, FileMode.Open))
{
ObjectReader objectReader = new ObjectReader(fileStream);
Instance = (T)objectReader.Read();
fileStream.Close();
}
}
else
{
Instance = Activator.CreateInstance<T>();
}
}
public void Save()
{
lock (this)
{
String tmpFileName = string.Format("{0}.tmp", FileName);
using (FileStream fileStream = new FileStream(tmpFileName, FileMode.OpenOrCreate, FileAccess.Write))
{
ObjectWriter objectWriter = new ObjectWriter(fileStream);
objectWriter.Write(Instance);
fileStream.Close();
}
if (!File.Exists(FileName))
File.Move(tmpFileName, FileName);
else
File.Replace(tmpFileName, FileName, FileName + ".old");
}
}
}
}