2016-12-02 7 views
0

Im делая приложение для входа в C#, и я хочу сохранить электронную почту, имя пользователя и пароль в одном .txt-файле, как я могу это сделать, а затем загрузить имя пользователя и пароль при импорте и электронной почты в главном окне?Сохраните и загрузите данные из .txt файлов

это мой Войти код:

string dir = textBox1.Text; 
      if (!Directory.Exists("data\\" + dir)) 
       MessageBox.Show("User Dosen't Exist!", dir); 
      else 
      { 
       var sr = new StreamReader("data\\" + dir + "\\data.ls"); 

       string encusr = sr.ReadLine(); 
       string encpass = sr.ReadLine(); 
       string encemail = sr.ReadLine(); 
       sr.Close(); 

       string decusr = Encryption.Encrypt.decrypt(encusr); 
       string decpass = Encryption.Encrypt.decrypt(encpass); 
       string decemail = Encryption.Encrypt.decrypt(encemail); 

       if (decusr == textBox1.Text && decpass == textBox2.Text) 
       { 

        MessageBox.Show("Welcome To Private Area", decusr); 
        Main_Form frm = new Main_Form(); 
        frm.Show(); 
        this.Hide(); 
       } 
       else 
       { 
        MessageBox.Show("Password Or Username Is Wrong!", "", MessageBoxButtons.OK, MessageBoxIcon.Error); 
       } 
      } 

и это сохранение код:

string dir = textBox1.Text; 
      Directory.CreateDirectory("Data\\" + dir); 

      var sw = new StreamWriter("Data\\" + dir + "\\data.ls"); 

      string encusr = Encryption.Encrypt.encrypt(textBox1.Text); 
      string encpass = Encryption.Encrypt.encrypt(textBox2.Text); 
      string encemail = Encryption.Encrypt.encrypt(textBox3.Text); 

      sw.WriteLine(encusr); 
      sw.WriteLine(encpass); 
      sw.WriteLine(encemail); 
      sw.Close(); 

      MessageBox.Show("User Was Successfully Created: " + textBox1.Text); 
      this.Close(); 
+0

ли вам е xperience любые ошибки с реализацией? –

+0

IMO вы должны сделать это в стиле CSV («имя пользователя», «пароль», «электронная почта»), а затем вы можете прочитать этот файл по строкам и проверить, есть ли (строка [0] == usernameInput) –

+0

Уверен, что вы собираюсь найти способ исправить это, но я думаю, что даже когда вы найдете решение, вы идете не так. txt-файлы не лучший способ сохранить эту информацию. Попробуйте искать файлы XML или файлы JSON, и если вы хотите глубже, почему бы вам не попробовать SQLLite? –

ответ

0

Вы можете изменить Main_Form включать поле электронной почты следующим образом:

public class Main_Form : Window 
{ 
    public string Email { get; set; } 
    // skipped rest of main form implementation 
} 

Затем вы можете установить поле электронной почты при создании Main_Form:

MessageBox.Show("Welcome To Private Area", decusr); Main_Form frm = new Main_Form(); frm.Email = decemail; frm.Show(); this.Hide();

0

Прежде всего, ваш код будет просто посмотреть на первой записи внутри файла, это вы должны исправить, делая что-то вроде:

using (var sr = new StreamReader("data\\" + dir + "\\data.ls")){ 
    string line = string.Empty; 
    while((line = sr.ReadLine()) != null) { 
     // assume that 1 is username 
     if(decusr == textBox1.Text) { 
      if((line = sr.ReadLine()) == decpass == textBox2.Text) { 
       // user is logged in store email 
       UserEmail = sr.ReadLine(); 
      } 
     } 
    } 
} 

После этого вы можете просто добавить член поля и собственность в ваш Main_Form как так:

public class Main_Form : Window 
{ 
    public string UserEmail { get; private set; } 
    /* 
    * Rest of your code 
    */ 
} 

EDIT: (т он может быть лучше, но все-таки с помощью текстового файла)

Лучше всего было бы просто переписать логику сохранения/загрузки для хранения данных в формате CSV как файл:

public string ProduceLine(string username, string password, string email){ 
    return string.Join(";", new string[] { 
     Encryption.Encrypt.encrypt(username), 
     Encryption.Encrypt.encrypt(password), 
     Encryption.Encrypt.encrypt(email) 
    }; // this will return something like "encrypted_username;encrypted_password;encrypted_email" 
} 

Затем, когда вы будете загружать файл, который вы можете просто использовать простой метод для сравнения:

public string TryLogin(string username, string password) { 
    // this will return user email upon succesfull logging in 
    using (var sr = new StreamReader("data\\" + dir + "\\data.ls")){ 
     string line = string.Empty; 
     while((line = sr.ReadLine()) != null) { 
      string[] extracted = string.Split(";"); 
      if(extracted[0] == Encryption.Encrypt.encrypt(username) && extracted[1] == Encryption.Encrypt.encrypt(password)) { 
       return Encryption.Encrypt.decrypt(extracted[1]); 
      } 
     } 
    } 
    return string.Empty; 
} 

Это позволит вам урезать ваши методы, как:

string email = TryLogin(textBox1.Text, textBox2.Text); 
if(!string.IsNullOrEmpty(email)) 
{ 
    MessageBox.Show("Welcome To Private Area", decusr); 
    Main_Form frm = new Main_Form(); 
    frm.Show(); 
    this.Hide(); 
} 
else 
{ 
    MessageBox.Show("Password Or Username Is Wrong!", "", MessageBoxButtons.OK, MessageBoxIcon.Error); 
}  
+0

string [] extract = string.Split (";"); дает мне ошибку –

Смежные вопросы