找到包含......等的行

时间:2011-03-12 03:23:03

标签: c#

好吧,我基本上试图找到一条带有“Users.txt”

的行

到目前为止我的代码。

if (ok == "b" || ok == "B")
    {
    using (StreamWriter w = File.AppendText("Users.txt"))
        {
            //Test
            Out.WriteLine("Please state the username");
            string user = Console.ReadLine();
            Out.WriteLine("Checking..");
            if (w.Equals(user))
            {
                Out.WriteLine("Username is taken");
            }
            Thread.Sleep(pause);
            Out.WriteLine("Please state the password for the user");
            string pass = Console.ReadLine();
            Logger(user, pass, w);
            // Close the writer and underlying file.
            w.Close();
            Out.WriteLine("Checking..");
            Out.WriteBlank();
            Thread.Sleep(pause);
            Out.WriteLine("Anything else Mr." + Environment.UserName + " ?");
        }
            string choice = Console.ReadLine();

            if (choice == "no")
            {
                Boot();
            }
            if (choice == "yes")
            {
                Console.Clear();
                Console.Title = "Administrator Panel";
                Panel();
            }
        }

希望它看看是否采用了“用户”,然后阻止他们执行该过程。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

尝试将每个现有用户名(StreamReaderFile.Open)读入数组/列表,然后将用户输入与该列表进行比较。

您当前的代码实际上并没有读取任何内容,因为您使用StreamWriter File.AppendText只允许您写入文件的末尾。

<强>实施例

Reading File into a List

List<string> users = new List<string>();
using (StreamReader r = new StreamReader("Users.txt"))
{
    string line;
    while ((line = r.ReadLine()) != null)
    {
        users.Add(line);
    }
}

...

string user = Console.ReadLine();
Out.WriteLine("Checking..");
if (users.Contains(user))
{
    Out.WriteLine("Username is taken");
}

答案 1 :(得分:1)

您的代码存在各种问题。让我们看看我们是否可以一次分解一件。

using (StreamWriter w = File.AppendText("Users.txt"))

如果您想打开“Users.txt”并向其附加文本,此代码将非常有用。由于您要打开文件并从中读取,因此需要使用另一个对象StreamReader对象:

using (StreamReader r = File.Open("Users.txt"))

接下来,您要检查给定的用户名是否在文件中。你在做:

if (w.Equals(user))
{
    Out.WriteLine("Username is taken");
}

这不起作用。您正在将StreamWriter对象与String对象进行比较。他们永远不会平等。

您需要做的是改变程序的顺序,如下所示:

首先,将文件的全部内容读入内存。然后,在Using语句之外,处理您的用户输入和用户名/密码检查。

我们假设文件的组织方式如下:

username,password
username2,password2
johnsmith,mysecretcode
janedoe,blahblah

例如,您可以将每一行读入Dictionary对象,其中Key是用户名,Value是密码。

Dictionary<String, String> myDictionary = new Dictionary<String, String>
// Example of adding ONE username/password to the dictionary
myDictionary.Add("username", "password");

然后,检查用户名就像

一样简单
bool containsUsername = myDictionary.ContainsKey(username);

检查密码是:

bool doesPasswordMatch = myDictionary[username] == givenPassword;

试一试! C#是一门很好的语言。