Хранение данных в файле и IOException (процесс не может получить доступ к файлу) - C#

Узнай цену своей работы

Формулировка задачи:

Просто себе играюсь и решил проделать все шаги верификации. Возникла проблема при созданию нового пользователя. Если он введет имя и оно занято, программа снову предлагает ему ввести новое имя и проделав весь путь, в конце возникнет ошибка (IOException не обработано - Процесс не может получить доступ к файлу "Z:\Test.txt", так как этот файл используется другим процессом.) и соответственно данные не сохраняться. Как это исправить? Проблема в методе WriteAccauntDataInTXT(); Если пользователь введет имя которого нету в списке, программа все отлично принимает.
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;
  6. namespace Accaunt
  7. {
  8. class AccauntCheck
  9. {
  10. string accaunt;
  11. string password;
  12. string passwordAgain;
  13. string info;
  14. Random rand = new Random();
  15. public void AccauntCreate()
  16. {
  17. Console.Write("Hello! Enter your new account name - ");
  18. accaunt = Convert.ToString(Console.ReadLine());
  19. using (StreamReader sr = new StreamReader("Test.txt"))
  20. {
  21. string line = sr.ReadToEnd();
  22. if (!line.Contains(accaunt))
  23. {
  24. CheckIfAccountNameFree();
  25. }
  26. else
  27. {
  28. Console.ForegroundColor = ConsoleColor.Red;
  29. Console.WriteLine("Sorry! This nickname was taken. Try another one\n");
  30. Console.ForegroundColor = ConsoleColor.Gray;
  31. AccauntCreate();
  32. }
  33. }
  34. WriteAccauntDataInTXT();
  35. }
  36. public void WriteAccauntDataInTXT()
  37. {
  38. Console.WriteLine(info);
  39. using (StreamWriter sw = new StreamWriter("Test.txt", true))
  40. {
  41. sw.WriteLine(info);
  42. }
  43. }
  44. public void CheckIfAccountNameFree()
  45. {
  46. Console.Write("\nNow create you password - ");
  47. password = Convert.ToString(Console.ReadLine());
  48. Console.Write("One more time password - ");
  49. passwordAgain = Convert.ToString(Console.ReadLine());
  50. Console.WriteLine();
  51. CheckPassword();
  52. }
  53. public void CheckPassword()
  54. {
  55. if (password == passwordAgain)
  56. {
  57. int randomCode = rand.Next(1000, 10000);
  58. //Console.Write("To validate your account enter this code: " + randomCode + "\nCode: ");
  59. Console.Write("To validate your account enter this code: ");
  60. Console.ForegroundColor = ConsoleColor.Green;
  61. Console.Write(randomCode);
  62. Console.ForegroundColor = ConsoleColor.Gray;
  63. Console.Write("\nCode: ");
  64. int validateCode = Convert.ToInt32(Console.ReadLine());
  65. if (randomCode == validateCode)
  66. {
  67. info = "account name - " + accaunt + " " + "\npassword - " + password;
  68. string[] data = { info };
  69. }
  70. else
  71. {
  72. Console.WriteLine("\nYou enter wrong code. Try one more time!\n");
  73. CheckPassword();
  74. }
  75. }
  76. else
  77. {
  78. Console.ForegroundColor = ConsoleColor.Red;
  79. Console.WriteLine("Password is different! Enter it again.");
  80. Console.ForegroundColor = ConsoleColor.Gray;
  81. CheckIfAccountNameFree();
  82. }
  83. return;
  84. }
  85. public void AccauntEnter()
  86. {
  87. Console.Write("Enter your NickName: ");
  88. accaunt = Convert.ToString(Console.ReadLine());
  89. Console.Write("Enter your password: ");
  90. password = Convert.ToString(Console.ReadLine());
  91. using (StreamReader sr = new StreamReader("Test.txt"))
  92. {
  93. string checkSR = sr.ReadToEnd();
  94. if (checkSR.Contains(accaunt) == true)
  95. {
  96. if (checkSR.Contains(password) == true)
  97. {
  98. Console.WriteLine("Welcome back " + accaunt + "!");
  99. }
  100. else
  101. {
  102. Console.WriteLine("\nWrong password! Try one more time");
  103. AccauntEnter();
  104. }
  105. }
  106. else
  107. {
  108. Console.WriteLine("This user doesn't existe.\n");
  109. Operations.StartProgram();
  110. }
  111. }
  112. }
  113. }
  114. class Operations
  115. {
  116. public static void StartProgram()
  117. {
  118. AccauntCheck ac = new AccauntCheck();
  119. Console.WriteLine("Hello! Are you new customer or you have an account?");
  120. Console.WriteLine("1 - I have account\n2 - Create new account");
  121. string choise = Convert.ToString(Console.ReadLine());
  122. if (choise == "1")
  123. {
  124. ac.AccauntEnter();
  125. }
  126. else if (choise == "2")
  127. {
  128. ac.AccauntCreate();
  129. }
  130. else
  131. {
  132. Console.WriteLine("Error! Try one more time!");
  133. }
  134. }
  135. }
  136. class Program
  137. {
  138. static void Main(string[] args)
  139. {
  140. Operations.StartProgram();
  141. Console.ReadLine();
  142. }
  143. }
  144. }

Решение задачи: «Хранение данных в файле и IOException (процесс не может получить доступ к файлу)»

textual
Листинг программы
  1. public void AccauntCreate()
  2.         {
  3.             string lines = String.Empty; // сюда запишем строки из файла
  4.             Console.Write("Hello! Enter your new account name - ");
  5.             accaunt = Convert.ToString(Console.ReadLine());
  6.             using (StreamReader sr = new StreamReader("Test.txt"))
  7.             {
  8.                 lines = sr.ReadToEnd();  // считаем их и закроем поток    
  9.             }
  10.             if (!lines.Contains(accaunt)) // если имени нету задаём пароль и записываем в файл, иначе запускаем заново процесс ввода имени
  11.             {
  12.                 CheckIfAccountNameFree();
  13.                 WriteAccauntDataInTXT();
  14.             }
  15.             else
  16.             {
  17.                 Console.ForegroundColor = ConsoleColor.Red;
  18.                 Console.WriteLine("Sorry! This nickname was taken. Try another one\n");
  19.                 Console.ForegroundColor = ConsoleColor.Gray;
  20.                 AccauntCreate();
  21.             }            
  22.         }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.182 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы