BinaryFormatter

17/01/2008 - 19:57 von Brian Schmalisch | Report spam
Hallo,

ich finde meinen Fehler nicht. Ich habe folgende Elemente in meinem
Hauptformular:
[Serializable]
public struct SK
{
public string kp1;
public string lz;
public string kennung;
public string cml;
public string cd;
public string mn;
public string pk1;
public string rk;
public string nl;
public string lz2;
public OperatingSystem os;
public string sd;
public int ti;
public Guid gd;
public string fk;
public string pw;
public Version vers;
public long stor;
public int pc;
public string udm;
public string lz3;
public string pn;
public int ec;
public DateTime dt;
public string kp2;
}

private void LoadKeyFromDat()
{
string fName =
Application.ExecutablePath.ToLower().Replace(".exe", ".dat");

try
{
if (File.Exists(fName))
{
BinaryFormatter bf = new BinaryFormatter();
FileStream fs = new FileStream(fName, FileMode.Open,
FileAccess.Read, FileShare.Read);
SK[] schluessel = bf.Deserialize(fs) as SK[];
fs.Close();
if (schluessel[0].rk.Trim() != "" ||
schluessel[0].rk.Trim() != "-")
{
SoftKey = schluessel[0].rk.Trim();
}
else
{
SoftKey = "Demo";
}
}
}
catch
{
SoftKey = "Demo";
}
}

Sobald ich hier ankomme: if (schluessel[0].rk.Trim() != "" ||
schluessel[0].rk.Trim() != "-"), wird eine Exception ausgelöst. Die Datei
existiert und es befinden sich auch Eintràge darin. Ich erhalte jedoch keine
Werte in schluessel - ist null nach bf.Deserialize. Ich finde den Fehler
nicht.

Könnt ihr mir hier weiterhelfen?

Brian
 

Lesen sie die antworten

#1 Frank Dzaebel
17/01/2008 - 20:40 | Warnen spam
Hallo Brian,

ich finde meinen Fehler nicht. [...] Sobald ich hier ankomme: if
(schluessel[0].rk.Trim() != "" || schluessel[0].rk.Trim() != "-"), wird
eine Exception ausgelöst.



Welche? Ist rk vielleicht null? Dann
NullReferenceException, dann geht er logischerweise
in den catch Zweig. Hast Du rk vielleicht beim Serialisieren
vergessen zu setzen?
Abgesehen davon ist der Code (relativ) ok.
Nebenbei, soetwas:

Application.ExecutablePath.ToLower().Replace(".exe", ".dat");

ist nicht gut, an anderen Stellen kann auch ein .exe stehen.
Ggf. besser mit den Path-Methoden arbeiten.


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

Ähnliche fragen