2017-04-08 4 views
0

Obwohl ich diese Seite verwendet habe, um einige Fragen zu lernen und zu lösen, ist dies das erste Mal, dass ich eines frage.Login App und Streamreader auf WindowsForms (C#)

Ich arbeite an einer einfachen Login-Anwendung, die 2 Textdateien lesen sollte (eine mit Benutzernamen, die andere mit Passwörtern) und vergleichen Sie sie dann mit dem Text in ihren jeweiligen Textfeldern geschrieben.

string user, pass; 
    string pathtouser = @"C:\Users.txt";/*Both are 
             paths */ 
    string pathtopass = @"C:\Pass.txt"; 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Application.Exit(); 
    } 
    Login logeo = new Login(); 
    private void button2_Click(object sender, EventArgs e) 
    { 
     logeo.openFile(); 
    } 
    private void loginbutt_Click(object sender, EventArgs e) 
    { 
     StreamReader Read = new StreamReader(pathtouser); 
     StreamReader Reader = new StreamReader(pathtopass); 
     user = Read.ReadToEnd(); 
     pass = Reader.ReadToEnd(); 
     //Here we read the textfiles and add the string to the variables (user and pass) 

     if (Usertext.Text == user && passtext.Text == pass) 
     { 
      testing test = new testing(); 
      test.Show(); 
     }//New window it should open if username and password inserted in the textboxes are correct. 
     else 
     { 
      MessageBox.Show("User or password is incorrect. Please verify!!", "WARNING!!", MessageBoxButtons.OK, MessageBoxIcon.Hand); 
     }//Denies access and shows a warning. 

Es funktioniert gut ... Nur die erste Zeile zu validieren. Problem ist, dass ich um zwei weitere Benutzer und Passwörter für die Textdateien, die nicht gelesen werden, zugeordnet habe, daher kann ich mich nicht einloggen.

Ein Freund von mir hat vorgeschlagen, dass ich den ASCII-Code ausnutzen sollte, um die ganze Zeichenfolge zu finden, die die gewünschten Benutzernamen und Passwörter enthält und eine for-Schleife verwendet.

Als Anfänger, gibt es einen besseren Weg, dies zu tun? (Ich habe auch über Arrays lernen)

Antwort

0

Sie etwas versuchen könnten, wie ...

List<string> users = new List<string>(File.ReadAllLines(pathtouser)); 
List<string> passwords = new List<string>(File.ReadAllLines(pathtopass)); 
int index = users.IndexOf(Usertext.Text); 
if (index != -1 && index < passwords.Count) 
{ 
    if (passtext.Text == passwords[index]) 
    { 
     testing test = new testing(); 
     test.Show(); 
     return; 
    } 
} 
else 
{ 
    MessageBox.Show("User or password is incorrect. Please verify!!", "WARNING!!", MessageBoxButtons.OK, MessageBoxIcon.Hand); 
} 
+0

Vielen Dank! Ich musste damit herumspielen, um zu tun, was ich wollte, aber ich konnte es schließlich mit verschiedenen Benutzern und Passwörtern testen und es funktioniert sehr gut! :) – NoviceMav

0

Sie auch jede Zeile aus dem Users.txt lesen und das Passwort zu diesen jeweiligen gespeicherten vergleichen Position in Ihrer Pass.txt-Datei. So ein Anfänger zu sein können Sie zunächst versuchen, den folgenden Code zu verstehen und gehen sie bei der Verbesserung der später:

int lineCounter = 0; 
string user; 
List<string> passwords = new List<string>(File.ReadAllLines(pathtopass));//store passwords in a List array 

// Read the file and display it line by line. 
System.IO.StreamReader file = new System.IO.StreamReader("c:\\Users.txt"); 
while((user = file.ReadLine()) != null)//this will read each line at a time till it reaches the end of the file 
{ 
    if(Usertext.Text == user)//check for the user 
    { 
    try{ 
     if (passtext.Text == passwords[lineCounter])//check for the password stored in the respective line in the Password.txt 
     { 
      //do your thing--> 
      testing test = new testing(); 
      test.Show(); 
      return; 
     } 
     else 
     { 
      MessageBox.Show("User or password is incorrect. Please verify!!", "WARNING!!", MessageBoxButtons.OK, MessageBoxIcon.Hand); 
     }//Denies access and shows a warning. 
    } 
    catch(Exception frog)//catch any exception which might arise here 
    { 
     MessageBox.Show("Error: "+frog.Message.ToString()); 
    } 
    } 
    lineCounter++;//increment the counter to fetch the next index 
} 

file.Close();//close the file after reading is complete 

In diesem Beispiel wird Readline (Lesen jeder Zeile) von Stream und zugleich nutzt auch Liste Array alle lesen Linien und gibt es aus.

Verwandte Themen