Пытаюсь записать в файл данные, но увы не получается. Пробовал вызвать Close() в деструкторе, пишет что файл уже закрыт. В мейен вызывается только метод AddNote(). В коллекции все хорошо сохраняется. ПОдскажите, в какую сторону копать
using System.IO;
using System.Collections.Generic;
namespace Работа_с_файлом
{
internal class DataBase
{
private StreamWriter _writer;
private StreamReader _reader;
private string _name;
public List<Service> Services = new List<Service>();
public DataBase(string name)
{
_writer = new StreamWriter(new FileStream("temp.txt", FileMode.Create, FileAccess.Write));
_reader = new StreamReader(new FileStream(name, FileMode.OpenOrCreate, FileAccess.Read));
_name = name;
while (true)
{
string line = _reader.ReadLine();
if (line == null)
break;
string[] param = line.Split(' ');
Service temp = new Service(int.Parse(param[0]), param[1], param[2], param[3]);
Services.Add(temp);
_writer.WriteLine(line);
}
_reader.Close();
}
~DataBase()
{
File.Delete(_name);
File.Move("temp.txt", _name);
}
public void AddNote(Service note)
{
Services.Add(note);
_writer.WriteLine(note.ToString());
}
public void RemoveNote(Service note)
{
Services.Remove(note);
_writer.Close();
File.Move("temp.txt", _name);
_reader = new StreamReader(new FileStream(_name, FileMode.Open, FileAccess.Read));
_writer = new StreamWriter(new FileStream("temp.txt", FileMode.Create, FileAccess.Write));
while (true)
{
string line = _reader.ReadLine();
if (line == null)
break;
if (line != note.ToString())
_writer.WriteLine(line);
}
_reader.Close();
}
public void ChangeNote(Service source, Service changeble)
{
int index = Services.IndexOf(source);
if (index != -1)
{
Services[index] = changeble;
}
_writer.Close();
File.Move("temp.txt", _name);
_reader = new StreamReader(new FileStream(_name, FileMode.Open, FileAccess.Read));
_writer = new StreamWriter(new FileStream("temp.txt", FileMode.Create, FileAccess.Write));
while (true)
{
string line = _reader.ReadLine();
if (line == null)
break;
if (line != source.ToString())
_writer.WriteLine(line);
else
_writer.WriteLine(changeble.ToString());
}
_reader.Close();
}
}
}
Вместо деструктора определил метод Close() и там закрыл файл, но всё же интересно, в какой момент _writer успел закрыться или не закрыться вовсе
но увы не получается??? – tym32167 May 29 '22 at 21:16Flush/AutoFlush. Но в целом код [цензура]. – Alexander Petrov May 29 '22 at 21:57~DataBase()финализатор не имеет гарантий вызова, реализуйтеIDisposableинтерфейс, и вызывайтеDispose()явно. https://ru.stackoverflow.com/a/1138718/373567 вам бы выучить, как пользоваться IDisposable объектами и освоить ключевое словоusing. https://ru.stackoverflow.com/a/1410142/373567. – aepot May 29 '22 at 22:06