随机访问文件

时间:2014-09-26 09:31:39

标签: c#

我创建了一个登录表单应用程序,表单有两个文本框,一个接受用户名,另一个接受密码,用户名和密码已经存储在一个名为“Registered.txt”的文本文件中,表单也有一个按钮如果用户点击使用随机访问文件登录,我希望我的程序能够读取“Registered.txt”文件以检查输入的密码或用户名是否有效。

2 个答案:

答案 0 :(得分: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();  
        }
    }
}

答案 1 :(得分: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.");
}

您需要通过“using 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.");
}

此代码不仅仅是自行运行,而是可以帮助您获得所需内容。