Я работаю над чат-ботом, и я пытаюсь создать код в функции «обучения». Я довольно новичок в кодировании, но я подозреваю, что моя проблема связана с тем, что я не закрываю поток чтения, но я понятия не имею, как это сделать. Я бы хотел помочь найти наиболее эффективный способ решить эту проблему. Вот мой код.Невозможно записать строку в файл txt, потому что другой файл получает его
class Program
{
static bool isRecording = false;
static bool isTraining = false;
static bool shutdown = false;
static string path = Path.Combine(Directory.GetCurrentDirectory(), "memory.txt");
static string inputValue;
static string outputValue = " ";
static void Main(string[] args)
{
Console.WriteLine("Computer: Hello! I am MyAI Version 2.0.");
Console.WriteLine("Training?");
inputValue = Console.ReadLine();
inputValue = inputValue.ToLower();
inputValue = inputValue.Trim(new Char[] { ' ', '.', ',', ':', ';', '*' });
if (inputValue == "yes")
{
isTraining = true;
Console.WriteLine("Training mode set to true.");
Console.ReadLine();
}
else
{
isTraining = false;
Console.WriteLine("Training mode set to false");
Console.ReadLine();
}
Console.Clear();
CollectInput();
}
static void CollectInput()
{
var lines = System.IO.File.ReadLines(path);
while (!shutdown)
{
Console.Write("User: ");
inputValue = Console.ReadLine();
inputValue = inputValue.ToLower();
inputValue = inputValue.Trim(new Char[] { ' ', '.', ',', ':', ';', '*' });
StringComparison comp = StringComparison.OrdinalIgnoreCase;
if (inputValue == "hi" || inputValue == "hello" || inputValue == "greetings")
{
outputValue = "hi";
}
else if (inputValue.Contains("how are you"))
{
outputValue = "good";
}
else
{
if (isTraining)
{
if (isRecording)
{
//This is where I would like to write inputValue to path
isRecording = false;
}
}
if (File.ReadAllLines(path).Contains(inputValue))
{
outputValue = File.ReadLines(path)
.SkipWhile(line => line != inputValue)
.Skip(1)
.FirstOrDefault();
}
else
{
if (inputValue.Contains("?"))
{
outputValue = inputValue;
//This is where I would like to write inputValue to path
isRecording = true;
}
else
{
outputValue = "what about it?";
}
}
}
Console.Write("Computer: ");
Console.WriteLine(outputValue);
outputValue = " ";
}
}
}
File.Open (путь, FileMode.Open); outputValue = File.ReadLines (путь) .SkipWhile (line => line! = InputValue) .Skip (1) .FirstOrDefault(); – Mattinthehat
@Mattinthehat Вы все еще открываете новый дескриптор файла в 'outputValue = File.ReadLines (path)'. Найдите методы, которые используют дескриптор, возвращаемый 'File.Open'. Я думаю, что ваш IDE или компилятор должен предупредить вас о том, что вы отбрасываете возвращаемое значение 'File.Open' –
Можете ли вы уточнить? Я все еще новичок, и я не знаю лучшего способа повторить эту часть кода. В основном, это то, что он проверяет файл для ввода, а затем находит строку под ним. – Mattinthehat