2016-12-04 20 views
1

にロードするので、登録フォームでログインアプリケーションを作成していますが、何か助けが必要です。データを保存してxml

XMLクラス:

私は私がXMLの利用savefiledialogに1人のユーザーを保存およびロードすることができ、フォームを作成しました、私はちょっと行うことができ、XML内のすべてのアカウント情報を保存したい、ここでのコードです
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.IO; 
using System.Xml.Serialization; 

namespace Login_Form 
{ 
    public class xmlSave 
    { 
     public static void SaveData(object IClass, string filename) 
     { 
      StreamWriter writer = null; 
      try 
      { 
       XmlSerializer xml = new XmlSerializer((IClass.GetType())); 
       writer = new StreamWriter(filename); 
       xml.Serialize(writer, IClass); 
      } 
      finally 
      { 
       if (writer != null) 
        writer.Close(); 
       writer = null; 
      } 
     } 
    } 

    public class xmlLoad<T> 
    { 
     public static Type type; 

     public xmlLoad() 
     { 
      type = typeof(T); 
     } 

     public T LoadData(string filename) 
     { 
      T result; 
      XmlSerializer xml = new XmlSerializer(type); 
      FileStream fs = new FileStream(filename, FileMode.Open,  FileAccess.Read, FileShare.Read); 
      result = (T)xml.Deserialize(fs); 
      fs.Close(); 
      return result; 
     } 
    } 
} 

、ここでセーブとロードコードです:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.IO; 
using System.Xml.Serialization; 

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

     private void button1_Click(object sender, EventArgs e) 
     { 
      saveFileDialog.InitialDirectory =  @"C:\Users\Felix\Documents\visual studio 2013\Projects\Login Form\Login  Form\bin\Debug"; 
      saveFileDialog.Filter = "xml Files (*.xml)|*.xml"; 
      saveFileDialog.FilterIndex = 2; 
      saveFileDialog.RestoreDirectory = true; 

      if(saveFileDialog.ShowDialog() == DialogResult.OK) 
      { 
       User user = new User(); 
       user.FName = textBox1.Text; 
       user.LName = textBox2.Text; 
       user.Username = textBox3.Text; 
       user.Email = textBox4.Text; 
       user.Password = textBox5.Text; 
       xmlSave.SaveData(user, saveFileDialog.FileName); 
      } 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      User user = new User(); 
      xmlLoad<User> loadUser = new xmlLoad<User>(); 

      user = loadUser.LoadData("test.xml"); 
      textBox1.Text = user.FName; 
      textBox2.Text = user.LName; 
      textBox3.Text = user.Username; 
      textBox4.Text = user.Email; 
      textBox5.Text = user.Password;  
     } 
    } 

    public class User 
    { 
     private string fName; 
     private string lName; 
     private string username; 
     private string email; 
     private string password; 

     public string FName 
     { 
      get { return fName; } 
      set { fName = value; } 
     } 

     public string LName 
     { 
      get { return lName; } 
      set { lName = value; } 
     } 

     public string Username 
     { 
      get { return username; } 
      set { username = value; } 
     } 

     public string Email 
     { 
      get { return email; } 
      set { email = value; } 
     } 

     public string Password 
     { 
      get { return password; } 
      set { password = value; } 
     } 
    } 
} 

また、これは、私はxmlファイルのみが1ユーザーに5つのテキストボックスから情報を保存することができます私は、複数のユーザーを保存する方法を知りたいとこれをログインシステムとして使用する方法(サーバーはなく、現時点ではローカルのみ)と、適切な情報をロードする方法私のメインアプリケーションは、例えば、ユーザー1にログインしていれば、そのユーザーの情報を他のユーザーと同じにしたいと思っています。私がひどく説明していれば、すみません。

+0

あなたが1つのXMLファイル内のすべてのデータが必要な場合、あなたはそれが簡単のDataTableの行に各ユーザーを置くことを見つけて、XMLファイルを読み書きすることを使用することができます:https://msdn.microsoft.com/en-us/library/78x6533x(v=vs.110).aspx –

+0

投稿コードに関する[MCVE]ガイダンスをお読みください。 1つまたは2つが問題を示すときには、多数のプロパティ/テキストボックス/何であれサンプルを持つ必要は全くありません。また、コンパクトであるため、サンプルコードで自動プロパティー( 'public string Name {get; set}')を使用してください(何らかの理由でフルバージョンのプロパティーが必要なコーディング標準については気にしません)。 –

答えて

1

複雑なDbを必要としない場合にデータベースを使用すると、SQLiteが最適だと思います。

XMLにデータを保存したい場合は、UserList全体を保存するか、XMLファイルをユーザーの一時フォルダPath.GetTempPath()に保存する必要がありますが、ユーザーが別のWindowsユーザーでログインした場合にのみwokrks 。

0

上記のように、SQLを使用するか、少なくとも1つのXMLファイルにすべてのユーザーを格納するのが最善の方法です。しかし、実際にすべてのユーザー情報を別々のファイルに保存する必要がある場合は、ユーザー情報ファイル用にいくつかのディレクトリを作成し、ログインするかユーザー情報を取得するたびに、すべてのファイルをスローしてそれぞれを逆シリアル化する必要があります。そのような

何か:

string[] files = Directory.GetFiles('your user storage directory'); 
foreach (string file in files) { 
    user = loadUser.loadData(file); 
    //your logic goes here 
} 
関連する問題