Chciałbym utworzyć coś na styl logowania google gmail z zapisanymi profilami.
Mam klase User składającą się z loginu i hasała i chciałbym żeby w momencie zalogowania profil mi się zapisywał w formie Listy do pliku. jak to mogę zrobić?
Poczytaj o klasie File z namespace System.IO. Nie wiem w czym masz problem. Masz jakiś konkretny, czy po prostu nie wiesz, jak zapisać plik?
Użyj do tego serializacji XML. Ujednolici Ci to format danych tak, że nie będziesz musiał martwić się tym w jaki sposób upakować je w pliku.
using System;
using System.Text;
using System.Linq;
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;
// Czy tam inna nazwa, bo na dobrą sprawę `ISerializable` już w .NET'cie istnieje :)
interface ISerializable
{
void Serialize(string destinationFile);
void Deserialize(string sourceFile);
}
[Serializable]
public class Person : ISerializable
{
public string Name { get; set; }
public string Surname { get; set; }
public void Deserialize(string sourceFile)
{
var deserial = new XmlSerializer(typeof(Person));
using (var stream = new StreamReader(sourceFile))
{
var data = (Person)deserial.Deserialize(stream);
this.Name = data.Name;
this.Surname = data.Surname;
}
}
public void Serialize(string destinationFile)
{
var serial = new XmlSerializer(typeof(Person));
using (var stream = new StreamWriter(destinationFile))
{
serial.Serialize(stream, this);
}
}
}
class Program
{
public static void Main(string[] args)
{
var person = new Person { Name = "Joe", Surname = "Someone" };
person.Serialize("database.txt");
var newPerson = new Person();
newPerson.Deserialize("database.txt");
Console.WriteLine(newPerson.Name + " " + newPerson.Surname);
}
}
Dane logowanie można dodatkowo zaszyfrować i zamiast string
możesz spokojnie do pliku serializować zaszyfrowane bajty byte[]
nie przejmując się kompletnie upakowaniem danych :) Rzecz jasna serializować w ten sposób można również całe kolekcje. Kwestia tego co wpiszesz jako typeof
i do czego będziesz konwertował deserializowany obiekt.
To Serializable
w kodzie @grzesiek51114 jest niepotrzebne, bo służy do umożliwienia serializacji binarnej, której tutaj nie mamy.
No i ten obiekt, który sam się serializuje i deserializuje z pliku... niby to zgodne z wzorcem Active Record, ale z drugiej strony, to antywzorzec łamiący SRP.