Хранение данных в файле и IOException (процесс не может получить доступ к файлу) - C#
Формулировка задачи:
Просто себе играюсь и решил проделать все шаги верификации. Возникла проблема при созданию нового пользователя. Если он введет имя и оно занято, программа снову предлагает ему ввести новое имя и проделав весь путь, в конце возникнет ошибка (IOException не обработано - Процесс не может получить доступ к файлу "Z:\Test.txt", так как этот файл используется другим процессом.) и соответственно данные не сохраняться. Как это исправить? Проблема в методе WriteAccauntDataInTXT();
Если пользователь введет имя которого нету в списке, программа все отлично принимает.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace Accaunt
{
class AccauntCheck
{
string accaunt;
string password;
string passwordAgain;
string info;
Random rand = new Random();
public void AccauntCreate()
{
Console.Write("Hello! Enter your new account name - ");
accaunt = Convert.ToString(Console.ReadLine());
using (StreamReader sr = new StreamReader("Test.txt"))
{
string line = sr.ReadToEnd();
if (!line.Contains(accaunt))
{
CheckIfAccountNameFree();
}
else
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Sorry! This nickname was taken. Try another one\n");
Console.ForegroundColor = ConsoleColor.Gray;
AccauntCreate();
}
}
WriteAccauntDataInTXT();
}
public void WriteAccauntDataInTXT()
{
Console.WriteLine(info);
using (StreamWriter sw = new StreamWriter("Test.txt", true))
{
sw.WriteLine(info);
}
}
public void CheckIfAccountNameFree()
{
Console.Write("\nNow create you password - ");
password = Convert.ToString(Console.ReadLine());
Console.Write("One more time password - ");
passwordAgain = Convert.ToString(Console.ReadLine());
Console.WriteLine();
CheckPassword();
}
public void CheckPassword()
{
if (password == passwordAgain)
{
int randomCode = rand.Next(1000, 10000);
//Console.Write("To validate your account enter this code: " + randomCode + "\nCode: ");
Console.Write("To validate your account enter this code: ");
Console.ForegroundColor = ConsoleColor.Green;
Console.Write(randomCode);
Console.ForegroundColor = ConsoleColor.Gray;
Console.Write("\nCode: ");
int validateCode = Convert.ToInt32(Console.ReadLine());
if (randomCode == validateCode)
{
info = "account name - " + accaunt + " " + "\npassword - " + password;
string[] data = { info };
}
else
{
Console.WriteLine("\nYou enter wrong code. Try one more time!\n");
CheckPassword();
}
}
else
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Password is different! Enter it again.");
Console.ForegroundColor = ConsoleColor.Gray;
CheckIfAccountNameFree();
}
return;
}
public void AccauntEnter()
{
Console.Write("Enter your NickName: ");
accaunt = Convert.ToString(Console.ReadLine());
Console.Write("Enter your password: ");
password = Convert.ToString(Console.ReadLine());
using (StreamReader sr = new StreamReader("Test.txt"))
{
string checkSR = sr.ReadToEnd();
if (checkSR.Contains(accaunt) == true)
{
if (checkSR.Contains(password) == true)
{
Console.WriteLine("Welcome back " + accaunt + "!");
}
else
{
Console.WriteLine("\nWrong password! Try one more time");
AccauntEnter();
}
}
else
{
Console.WriteLine("This user doesn't existe.\n");
Operations.StartProgram();
}
}
}
}
class Operations
{
public static void StartProgram()
{
AccauntCheck ac = new AccauntCheck();
Console.WriteLine("Hello! Are you new customer or you have an account?");
Console.WriteLine("1 - I have account\n2 - Create new account");
string choise = Convert.ToString(Console.ReadLine());
if (choise == "1")
{
ac.AccauntEnter();
}
else if (choise == "2")
{
ac.AccauntCreate();
}
else
{
Console.WriteLine("Error! Try one more time!");
}
}
}
class Program
{
static void Main(string[] args)
{
Operations.StartProgram();
Console.ReadLine();
}
}
}Решение задачи: «Хранение данных в файле и IOException (процесс не может получить доступ к файлу)»
textual
Листинг программы
public void AccauntCreate()
{
string lines = String.Empty; // сюда запишем строки из файла
Console.Write("Hello! Enter your new account name - ");
accaunt = Convert.ToString(Console.ReadLine());
using (StreamReader sr = new StreamReader("Test.txt"))
{
lines = sr.ReadToEnd(); // считаем их и закроем поток
}
if (!lines.Contains(accaunt)) // если имени нету задаём пароль и записываем в файл, иначе запускаем заново процесс ввода имени
{
CheckIfAccountNameFree();
WriteAccauntDataInTXT();
}
else
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Sorry! This nickname was taken. Try another one\n");
Console.ForegroundColor = ConsoleColor.Gray;
AccauntCreate();
}
}