69 lines
1.9 KiB
C#
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");
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|