Попытка создать систему входа в систему C# - PullRequest
0 голосов
/ 09 января 2020

Я пытаюсь создать для своей программы простую систему входа в систему, однако у меня возникают ошибки при добавлении более одного имени пользователя и пароля, поскольку при попытке ввести вторичное имя пользователя и пароль появляется сообщение об ошибке. он работает с первым именем пользователя и паролем, которые я реализовал!

например,

Matthew~Dorrian (это работает, если это первая запись в файл)

Dorrian~Matthew (это не работает, так как это вторая запись в файл)

Имя пользователя и пароль записываются в один файл, который выглядит следующим образом:

Matthew~Dorrian~Dorrian~Matthew

Имя пользователя и пароль записываются в файл как ("~" + имя пользователя + "~" + пароль + "~")

string[] users File.ReadLines("users.txt").ToArray();
bool UserFound = false;



for(int i = 0; i < users.Length; i++)
{
    string[] usernameandpassword = users[i].Split("~");
    if(username == usernameandpassword[0] && password == usernameandpassword[1])
    {
        userfound = true;
        break;
    }
}

Ответы [ 3 ]

2 голосов
/ 09 января 2020

Мэтью ~ Дорриан ~ Дорриан ~ Мэтью

Это написано в одну строку, и вы пытаетесь читать все построчно

строка [] users File.ReadLines ("users.txt"). ToArray ();

users [0] будет "Мэтью ~ Дорриан ~ Dorrian ~ Мэтью" и нет пользователей [1]

для (int i = 0; i

Так что это будет l oop только один раз, и с этим

если (username == usernameandpassword [0] && password == usernameandpassword [1])

, то вы получите только 2 слова из 4, потому что оно повторяется только 1 раз

Редактировать: Мое решение было бы изменить это

if(username == usernameandpassword[0] && password == usernameandpassword[1])
{
    userfound = true;
    break;
}

на это

    int i = 0;
    while(i + 1 < usernameandpassword.Length)
    {
        if(username == usernameandpassword[i] && password == usernameandpassword[i+1])
        {
            userfound = true;
            break;
        }
        i+=2;
    }

Редактировать 2: Но тогда, это не будет работать, если ваш файл будет выглядеть так:

Matthew~Dorrian~Dorrian
Matthew

Было бы просто пропустить второго Дорриана, а затем второго Мэтью, потому что остался только один. Итак, вот решение, которое решает это:

int count = 0; //how many strings in buf
string[] buff = new string[2]{ "", "" }; //here we will store our results
for (int i = 0; i < users.Length; i++)
{
    string[] usernameandpassword = users[i].Split("~");
    for (int wordIndex = 0; wordIndex < usernameandpassword.Length; wordIndex++)
    {
        buff[count] = usernameandpassword[wordIndex];

        count++;
        if (count > 1)
        {
            if (username == buff[0] && password == buff[1])
            {
                userfound = true;
                break;
            }
            count = 0;
        }
    }
}
1 голос
/ 09 января 2020

Согласно описанию в вашем вопросе, «имя пользователя и пароль записываются в один файл, который выглядит как Мэтью ~ Дорриан ~ Дорриан ~ Мэтью».

Если так выглядит ваш файл, я считаю, проблема в том, что вы пытаетесь создать массив строк, каждая из которых представляет отдельную комбинацию пользователя и пароля в вашем файле, но весь файл данных хранится в одной строке.

string[] users File.ReadLines("users.txt").ToArray();

Если вы просто поместили каждую комбинацию пользователь / пароль в отдельную строку в файле, это должно решить вашу проблему.

Я также хотел бы отметить, что, если это приложение предназначено только для тестирования или в образовательных целях , вам, вероятно, следует зашифровать данные для входа, которые, по-видимому, хранятся в виде обычного текста.

0 голосов
/ 09 января 2020

Ваши исходные данные

Мэтью ~ Дорриан ~ Дорриан ~ Мэтью

В одной строке были и пользователи, и пароли,

Поэтому, когда вы читаете файл, вы получаете один строка, а не две.

Чтобы этот код работал, вам нужен второй пользователь на новой строке. Т.е.

Мэтью ~ Дорриан Дорриан ~ Мэтью

В настоящее время ваш второй пользователь хранится в 3-м и 4-м элементах первой строки. Т.е. usernameandpassword [2] и usernameandpassword [3] в первой записи в l oop.

...