2014-09-26 87 views
-5

我已經創建了一個登錄表單應用程序,表單有兩個文本框一個接受用戶名,另一個接受密碼,用戶名和密碼已存儲在名爲「Registered.txt」的文本文件中有一個名爲login的按鈕,我希望我的程序能夠讀取「Registered.txt」文件,以檢查用戶是否單擊使用隨機訪問文件登錄時,密碼或用戶名輸入是否有效。隨機訪問文件

+2

你有哪些麻煩? – 2014-09-26 09:32:33

+1

你到目前爲止嘗試過什麼?任何嘗試?你能否展示一些代碼示例並指定發生了什麼問題? – 2014-09-26 09:33:03

+1

「..用戶名和密碼已存儲在文本文件中...」好主意:)提供一些代碼..它會幫助我們幫助你... – 2014-09-26 09:35:35

回答

0

我舉個例子,希望它能幫助你得到你想要的。

在這個例子中你Registered.txt文件應該是這樣: Smartsasse,MYPASSWORD OlofBoll,P @提供ssword

//var path = @"C:\Registered.txt"; 
var path = "Registered.txt"; 

var allLines = System.IO.File.ReadAllLines(path); 

var userInfo = allLines.Select(l => l.Split(',')).Select(s => new 
{ 
    Username = s[0], 
    Password = s[1] 
}).ToList(); 

var user = userInfo.FirstOrDefault(ui => ui.Username.ToLowerInvariant() == this.UserNameTextBox.Text.Trim().ToLowerInvarant()); 

if (user != null && user.Password == this.PasswordTextBox) 
{ 
    // Login is okay 
    this.ViewState["loggedInUser"] = user.Username; 
} 
else 
{ 
    // Show error message 
    throw new Exception("Couldn't login, invalid username or password."); 
} 

您將需要通過「使用System.Linq的引用 「System.Linq的」; 」。如果沒有,你可以改變一些代碼來:

bool success = false; 
foreach (var line in allLines) 
{ 
    var username = line.Split(',')[0]; 
    var password = line.Split(',')[1]; 

    if (username == this.UserNameTextBox.Text && password == this.PasswordTextBox.Text) 
    { 
     // Login 
     // this.ViewState["loggedInUser"] = user.Username; 
     success = true; 
     break; 
    } 
} 

if (success == false) 
{ 
    // Show error 
    throw new Exception("Couldn't login, invalid username or password."); 
} 

此代碼不會被它自己剛剛運行,但可能會幫助你得到你想要的東西。

0

首先,正如Edi G.在評論中提到的那樣 - 在純文本文件中存儲用戶名和密碼是非常糟糕的主意。這種方法的安全性絕對爲零。

但是,如果你仍然想嘗試 - 在這裏一些指導。

要從文件中讀取文本數據,您需要創建FileStream指向您的文件並StreamReader從該流讀取。

using (var fs = new FileStream(@"path_to_your_file\Registered.txt", FileMode.Open)) 
{ 
    using (var reader = new StreamReader(fs)) 
    { 
     var line = reader.ReadLine(); 
     while (line != null) 
     { 
      // do your checks here 

      line = reader.ReadLine(); 
     } 
    } 
} 
+0

將用戶名和密碼存儲在文本文件中是非常糟糕的做法,但安全性不需要爲「絕對零」,因爲您可以限制訪問該文件,只是因爲它是一個純文本文件,其中的信息可以被加密。但是,是的,還是非常糟糕的做法。 – Sasse 2014-09-26 09:52:27

+0

感謝所有的答案,你們是最好的,非常感謝你 – 2014-09-26 09:54:26

+0

@Sasse嗯,在這種情況下,限制對文件的讀訪問是不可能的,因爲程序需要從中讀取並且程序在某些用戶的憑證下運行。這樣用戶將能夠從文件中讀取。 :)所以只有加密才能提供幫助,但它沒有OP的問題範圍。 – 2014-09-26 09:57:44