2016-03-16 8 views
0

Я хочу разрешить пользователю вводить имя пользователя. Затем имя пользователя должно быть сохранено в файле (создайте файл, если он не существует). Однако пользователь должен получить сообщение об ошибке, если имя пользователя уже существует в файле.Как разрешить пользователю сохранять имена пользователей?

После этого пользователь должен иметь возможность ввести новое имя пользователя.

Моя проблема в том, что я не знаю, как продолжать запрашивать имена пользователей?

string fileName = ("Usernames.txt"); 
if (File.Exists(fileName)) 
    Console.WriteLine("Username file already exists!"); 
else 
    Console.WriteLine("Username file was created!"); 
    FileStream un = new FileStream("Usernames.txt", 
     FileMode.Create, FileAccess.Write); 
    StreamWriter kasutajanimed = new StreamWriter(un); 
    Usernames.Close(); 

Console.WriteLine("Username: "); 
string uCreation = Console.ReadLine(); 
bool exists = false; 
foreach (string lines in File.ReadAllLines("Usernames.txt")) 
{ 
    if (lines == uCreation) 
    { 
     Console.WriteLine("Username already exists!"); 
     exists = true; 
     break; 
    } 
} 
if (!exists) 
{ 
    File.AppendAllText(@"Usernames.txt", uCreation + Environment.NewLine); 
} 
+1

Добро пожаловать в сообщество. Вам нужно отрегулировать свой вопрос, чтобы вы спросили об определенной проблеме. Сообщите нам, что не работает или какая часть кода вам нужна. – jgauffin

+0

Да, но теперь я не могу найти способ продолжить работу с кодом, чтобы просить X вещей. Иначе спасибо! – CrimzonWeb

ответ

0

Вам просто нужен еще один цикл, чтобы они могли ввести другое имя пользователя.

while(true) 
{ 
    Console.WriteLine("Username: "); 
    string uCreation = Console.ReadLine(); 
    bool exists = false; 

    foreach (string lines in File.ReadAllLines("Usernames.txt")) 
    { 
     if (lines == uCreation) 
     { 
      Console.WriteLine("Username already exists!"); 
      exists = true; 
      break; 
     } 
    } 

    if (!exists) 
    { 
     File.AppendAllText(@"Usernames.txt", uCreation + Environment.NewLine); 
     break; 
    } 
} 
+0

Вау, это было плохо. Это должно быть правильно. –

+0

Когда он запрашивает имя пользователя, и вы вводите один, он берет его и запрашивает новый, скорее, для продолжения кода. И когда вы вводите одно и то же имя пользователя дважды, оно говорит, что имя пользователя уже существует, и ТОГДА оно продолжается с остальной частью кода. EDIT! Вы, казалось, исправили это, и это, казалось, сработало для меня! Благодаря! :) – CrimzonWeb

+0

@CrimzonWeb Поскольку ответ помог вам, вы должны отметить его как принятый. Рассмотрите возможность ответа также;) – Luaan

0

Если вы ищете файл в этом моду каждый раз, это будет O (n) для каждой записи. Я думаю, что лучший способ сделать это - сохранить набор, содержащий все имена пользователей в файле. Поэтому добавьте все имя пользователя в файл в HashSet при открытии файла. Затем вы можете просто позвонить hashSet.Contains(username), чтобы проверить, существует ли имя пользователя в O (1) раз.

Для того, чтобы просить пользователя, вы можете использовать цикл while. такие как

while (true) // Loop indefinitely 
    { 
     Console.WriteLine("Username: "); // Prompt 
     string line = Console.ReadLine(); // Get string from user 
     if (hashSet.Contains(line)) { 
      Console.WriteLine("Username Already in Use"); 
      continue; 
     } 
     if (line == "exit") // have a way to exit, you can do whatever you want 
     { 
     break; 
     } 
     // Here add to both file and your HashSet... 
    } 
Смежные вопросы