2016-12-04 110 views
1

所以我使用註冊表單進行登錄應用程序,但我需要一些幫助。我想保存在我還挺能做到的,我創建了一個表格,我可以保存和載入1用戶XML使用savefiledialog XML的所有賬戶信息,這裏的代碼:將數據保存並加載到xml

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; } 
     } 
    } 
} 

這讓我從5個文本框的信息保存到一個XML文件,但只有1個用戶,我想知道如何保存多個用戶,也如何將它用作登錄系統(沒有服務器,現在只有本地服務器),以及如何加載正確的信息e主應用程序,例如,如果im登錄到用戶1,我希望用戶信息displayd和其他用戶相同。我很抱歉,如果我解釋自己嚴重。

+0

如果你想在一個XML文件中的所有數據,你會發現它更容易把每一個用戶到一個DataTable的一排並用它來讀寫XML文件:https://msdn.microsoft.com/en-us/library/78x6533x(v=vs.110).aspx –

+0

請閱讀[MCVE]關於發佈代碼的指導。絕對沒有理由有大量的屬性/文本框/任何一個或兩個會顯示問題的樣本。在示例代碼中也使用自動屬性('public string Name {get; set}'),因爲它更緊湊(沒有人關心您的編碼標準,因爲某些原因可能需要完整版本的屬性)。 –

回答

1

我認爲如果您不需要複雜的數據庫,如果您使用數據庫的最佳方式,我認爲SQLite對您來說非常適合。

我的建議是,如果你想要將數據存儲在xml中,你必須保存整個UserList,或者你可以將XML文件保存到用戶臨時文件夾Path.GetTempPath(),但只有當用戶使用不同的Windows用戶。

0

如上所述,最好的方法是使用SQL或至少將所有用戶存儲在一個xml文件中。但是,如果您實際上需要將所有用戶信息存儲在單獨的文件中,則只能爲用戶信息文件創建一個目錄,並且每次登錄或獲取某些用戶信息時,都應該迭代拋出所有文件並對每個文件進行反序列化。

類似的東西:

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