Documente Academic
Documente Profesional
Documente Cultură
Laborator 11
1) S se realizeze o aplicaie n care fereastra principal a acesteia s-i pstreze poziia i dimensiunea de la o
execuie la alta.
Soluie:
Pas 1
Definim metodele urmatoare:
void citesteFisierInitializare()
{
FileStream fs = null;
StreamReader sr = null;
try
{
fs = new FileStream("start.ini", FileMode.Open, FileAccess.Read);
sr = new StreamReader(fs);
for (; ; )
{
String linie = sr.ReadLine();
if (linie == null) break;//daca s-a citit tot
if (linie.StartsWith("Pozitie"))
{
linie = linie.Substring(linie.IndexOf("=") + 1);
this.Left = Convert.ToInt16(linie.Substring(0, linie.IndexOf(" ")));
linie = linie.Substring(linie.IndexOf("=") + 1);
this.Top = Convert.ToInt16(linie.Substring(0, linie.IndexOf(" ")));
}
if (linie.StartsWith("Dimensiune"))
{
linie = linie.Substring(linie.IndexOf("=") + 1);
this.Width = Convert.ToInt16(linie.Substring(0, linie.IndexOf(" ")));
linie = linie.Substring(linie.IndexOf("=") + 1);
this.Height = Convert.ToInt16(linie.Substring(0, linie.IndexOf(" ")));
}
if (linie.StartsWith("Nume fereastra"))
{
linie = linie.Substring(linie.IndexOf(":") + 1);
this.Text = linie.Substring(0, linie.IndexOf(" "));
}
}
}
catch (System.Exception)
{
this.Left = 100;
this.Top = 100;
this.Width = 200;
1
Programare orientat pe obiecte Laborator 11
this.Height = 150;
this.Text = "I/O";
}
finally
{
if (sr != null) sr.Close();
if (fs != null) fs.Close();
}
}
void scrieFisierInitializare()
{
FileStream fs=null;
StreamWriter sw=null;
try
{
fs = new FileStream("start.ini", FileMode.Create);
sw = new StreamWriter(fs);
sw.WriteLine("Pozitie: X={0} Y={1} //pozitia ferestrei", this.Left, this.Top);
sw.WriteLine("Dimensiune: Latime={0} Inaltime={1} //dimensiunea ferestrei",
this.Width, this.Height);
sw.WriteLine("Nume fereastra:{0} //titlul ferestrei", this.Text);
}
catch (System.Exception) { }
finally
{
if (sw != null) sw.Flush();
if (sw != null) sw.Close();
if (fs != null) fs.Close();
}
}
Pas 2
La evenimentul Load asociat formularului adugm:
citesteFisierInitializare();
Pas 3
La evenimentul FormClosing asociat formularului adugm:
scrieFisierInitializare();
2
Programare orientat pe obiecte Laborator 11
2) S se modifice programul anterior astfel nct pentru salvarea/citirea datelor din fiiere s se foloseasc
serializarea datelor.
Datele mai complexe, de exemplu obiecte ale unei clase, se pot salva sub form de iruri de octei, dar va fi
foarte greu la restaurare s mprim octeii astfel nct s recompunem obiectele salvate. Majoritatea
limbajelor de nivel nalt, inclusiv C#, implementeaz un mecnism simplu i fiabil ne salvare i restaurare a
obiectelor prin intermediul fiierelor. Acest mecanism poart denumirea de serializare.
3
Programare orientat pe obiecte Laborator 11
Orice clas ale crei obiecte pot fi salvate sau restaurate prin intermediul fiierelor, va trebui fie s fie
declarat serializabil, fie s implementeze o interfa specific, numit ISerializable.
Declararea unei clase ca fiind serializabil se face prin specificarea atributului [Serializable].
[Serializable]
public class Persoana{...}
Transformarea obiectelor n iruri de octei pentru a fi executat transferul la nivelul fiierului, se face utiliznd
formatori (Formatters). Exist 2 tipuri de formatori: BinaryFormatter i SoapFormatter. Pentru utilizarea
acestor formatoare va trebui s adugm fiierului care implementeaz forma spaiul de nume
System.Runtime.Serialization.Formatters.Binary, iar pentru a putea implementa mecanismul efectiv de
serializare, spaiul de nume System.Runtime.Serialization.
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
...
Important: n acest caz nu mai este necesar prezena metodelor de scriere i citire din clasa Persoana.