2013-05-20 88 views
0

即使Log.txt文件包含我嘗試登錄的用戶名和密碼,以下STILL也不起作用。試圖使用StreamWriter和StreamReader創建登錄系統,但它不起作用?

這是我的重拍登錄代碼:

public void button1_Click(object sender, EventArgs e) 
    { 
     bool loggedin = false; 
     Form2 form2 = new Form2(); 
     Form1 form1 = new Form1(); 
     var contents = File.ReadAllLines(@"C:\log.txt"); 
     if (contents.Contains(Username.Text)) 
       { 
        loggedin = true; 
        MessageBox.Show("Login sucessfully", "Program", MessageBoxButtons.OK, MessageBoxIcon.Information); 
        form1.Hide(); 
        form2.Show(); 
       } 

       else 
       { 
        if (loggedin == false) 
        { 


         MessageBox.Show("Invalid username or password.", "Program", MessageBoxButtons.OK, MessageBoxIcon.Error); 
        } 
       } 

     } 

這是我的註冊代碼:

{ 
     using (System.IO.StreamWriter writer = new System.IO.StreamWriter("C:\\log.txt", true)) 
     { 
      writer.WriteLine("\r" + "Username : " + textBox1.Text); 
      writer.WriteLine("Password : " + textBox2.Text); 
      writer.WriteLine("Age : " + textBox4.Text); 
     } 

     Form5 form5 = new Form5(); 
     Form1 form1 = new Form1(); 
     form1.Show(); 
     this.Hide(); 
    } 

任何想法?

+5

你不是很努力地使用它們,你的代碼中沒有提及'StreamReader'和'StreamWriter' – musefan

+0

你試圖在字符串中找到用戶名和密碼:「log.txt」,而不是具有該名稱的文件。 – Bronek

+1

我給你一個提示:'StreamReader reader = new StreamReader(「log.txt」);'。 – JosephHirn

回答

6
  1. 您的代碼不起作用,因爲只是看看字符串「log.txt」是否包含用戶名並不實際打開文件並檢查內容。

  2. 不需要使用StreamReader/StreamWriter來讀取文件的文本。你只需要打開該文件,閱讀其內容,然後再覈查一下:

    contents = File.ReadAllLines(@"C:\Path\To\File\log.txt"); 
    if(contents.Contains(Username.Text)) 
    // ... 
    
  3. 我真誠地希望你不要指望這個系統是在毫釐安全。將所有用戶名/密碼組合存儲在純文本文件中是非常糟糕的。任何人都可以打開它,閱讀它並查看文件中的每個組合。另外,我所要做的就是猜測文件中的一些隨機字符串。我最好的選擇是猜測一個字母。我將有1/26的可能性存在於您的文件中,我將被授予訪問權限。

+0

我當然不是,這是我在C#中的第一個項目,因此只是爲了掌握如何在C#中創建某種啓動器。 – user2402224

+0

我想感謝你們所有人的回答如此之快並且非常有幫助,但遺憾的是它仍然無法工作。我將我的代碼更改爲: – user2402224

+0

謝謝,但現在我該怎麼辦? – user2402224

0
if("log.txt".Contains(Username.Text) 

這是檢查是否實際字符串「log.txt中」包含的用戶名,不走附近的任何文件。

+0

謝謝,但我現在要做什麼? – user2402224

0

您正在使用「Log.txt」作爲字符串。您需要搜索文件中的實際值。

+0

謝謝,但我現在要做什麼,它仍然不能正常工作:/ – user2402224

1

你的代碼沒有做你認爲正在做的事。

if ("log.txt".Contains(Username.Text)) 

這簡直是檢查是否"log.txt"(作爲一個字符串,而不是一個文件)包含含有用戶名字段中的文本。

假設你要檢查只有在用戶名存在,你可以做這樣的事情:

using System.Linq; 

// ... 

var usernames = File.ReadAllLines(@"C:\log.txt"); 
if (usernames.Contains("Username : " + Username.Text)) { 
    // Username exists 

注意,上面的代碼不帶任何照顧任何類型的密碼,無論如何,這當然不是生產就緒。您不應該使用文本文件來存儲您的憑證,而應該考慮使用數據庫,並使用適當的哈希和密碼。在考慮將它應用到應用程序之前,我會考慮更多地瞭解這種做法,因爲這是相當基本的。

關於你的問題應該是,你實際上並不使用StreamReaderStreamWriter任何地方的第一個跡象。

+0

對不起,我很不清楚,但我在註冊碼中使用StreamWriter。 – user2402224

+0

謝謝,但我現在要做什麼? – user2402224

+0

你是什麼意思你做什麼?我已經給你工作代碼來獲得你想要的工作,這根本不是理想的。 –

相關問題