Dateiversion setzen

29/12/2008 - 12:12 von Christian Havel | Report spam
Hi,

ich serialisieren ein BusinessObject und möchte in der erzeugten Datei die
Versionsnummer setzen (Eigenschaften der Datei, rechte Maustaste).

Wie mache ich dies?

Christian
 

Lesen sie die antworten

#1 Frank Dzaebel
29/12/2008 - 13:40 | Warnen spam
Hallo Christian,

ich serialisieren ein BusinessObject und möchte in der erzeugten
Datei die Versionsnummer setzen (Eigenschaften der Datei, rechte
Maustaste). Wie mache ich dies?



Normal versucht man oft eher in XML zu serialisieren.
Aber gut, es gibt mehrere Lösungs-Möglichkeiten, aber
ich gebe Dir mal ein Beispiel für eine etwas generischere:

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
IOPersistVersion<Business> ipv = new
IOPersistVersion<Business>("Datei.dat");
Business bo = new Business();
bo.Eigenschaft1 = 42;
ipv.Save(bo, new Version(1,1));
bo = null; ipv.Version = new Version();
bo = ipv.Load();
MessageBox.Show(
"Eigenschaft1: " + bo.Eigenschaft1 + ""+
"Version: " + ipv.Version.ToString());
}
}

[Serializable]
class Business
{
public Business()
{
Eigenschaft1 = -1;
}
public int Eigenschaft1 { get; set; }
private string privatesFeld1 = "leer";
}

class IOPersistVersion<T>
{
string dateiPfad;
private IOPersistVersion(){}

public IOPersistVersion(string dateiName)
{
this.dateiPfad = Path.Combine(Application.StartupPath, dateiName);
}

/// <summary>Version des persistierten Objektes</summary>
public Version Version { get; set; }

/// <summary>Sichert obj mit der in der globalen Eigenschaft
/// Version angegebenen Version.</summary>
public void Save(T obj)
{
Info info = new IOPersistVersion<T>.Info(this.Version, obj);
FileStream fs = new FileStream(dateiPfad, FileMode.Create,
FileAccess.Write, FileShare.None);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, info); fs.Close();
}

/// <summary>Sichert obj mit der in der angegebenen Version</summary>
public void Save(T obj, Version version)
{
this.Version = version;
Save(obj);
}

/// <summary>Làdt das object, wobei die Version
/// danach in der globalen Version-Eigenschaft abfragbar
/// ist.</summary>
public T Load()
{
Info obj;
FileStream fs = new FileStream(dateiPfad, FileMode.Open,
FileAccess.Read, FileShare.None);
BinaryFormatter bf = new BinaryFormatter();
obj = (Info)bf.Deserialize(fs); fs.Close();
this.Version = obj.Version;
return obj.Object;
}

[Serializable]
class Info
{
public Info(Version version, T obj)
{
this.Version = version;
this.Object = obj;
}

public Version Version { get; set; }
public T Object { get; set; }
}
}

_________

Man könnte natürlich auch einfach eine privates Feld Version
in der Business-Klasse unterbringen. Da kommt es etwas
auf den Kontext an ...


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen