


C# Помогите со StreamReader и StreamWriter, ситуация жуть!
1)
Одним классом я считываю текстовый файл, их около 100 шт. в папке D:\dir1\
private System.IO.StreamReader textfile = new System.IO.StreamReader(@"D:\dir1\" + Название_Текста + ".txt");
Как я считываю информацию с текстового файла:
string Строка;
while ((Строка = textfile.ReadLine()) != null)
{
Массив_Строк. Add(Строка);
}
textfile.Close();
1. Название_Текста - string значение, я проверил он в любых случаях совпадает с названием реального текстового файла в папке D:\dir1\
2. После того, как я забрал из текстового файла необходимую мне информацию, я вызываю функцию textfile.Close();
!!! Как выясняется далее, файл все-таки не закрывается, как я это выяснил опишется позже !!!
2) Вторым классом я записываю в текстовый файл информацию в ту же папку D:\dir1\
System.IO.StreamWriter file = new System.IO.StreamWriter(@"D:\dir1\" + Название_Текста + ".txt");
Как я записываю информацию в текстовый файл:
file.WriteLine("Строка №1");
file.WriteLine("Строка №2");
file.Close();
!!! В данном месте, т. е. где должна производиться запись в файл, постоянно выдает ошибку, что данный текстовый файл уже открыт и не может сейчас использоваться. !!
3)Как я определил, что файл не закрывается:
Первый класс (там, где с текстового файла считывается информация) работает нормально (в нем не выдает ошибок компилятор), изменил я только во втором классе дирректорию, куда записывать файл
System.IO.StreamWriter file = new System.IO.StreamWriter(@"D:\dir2\" + Название_Текста + ".txt");
Т. е. изменил всю строчку объявления file. И записывает без выдачи ошибки, то есть уже Записывает!
---
4)Зачем мне записывать в тот же файл, с которого я считывал информацию? Я эту информацию дополняю и "перезаписываю" файл, перезаписанная инфа постоянно мониторится еще одним классом
---
Явных проблем в архитектуре самой программы нет, над этим постарался.
Просто почему-то не разрешается перезаписывать в тот же файл.
Помогите, пожалуйста.
перезаписанная инфа постоянно мониторится еще одним классом
- в классе, где считывается информация из файла, все данные передаются в массив. Из массива уже мониторится информация. То есть информация мониторится не напрямую через StreamReader, а лишь после того, как информация считана из текста и передана в массив и сам текстовый файл уже закрыт. проблема тоже не в этом
Проблему решил так:
1. Чтение из файла:
using (System.IO.StreamReader readfile = new System.IO.StreamReader(@Вернуть_Дирректорию_Файла_Для_Чтения_По_Имени_Героя (Имя_Героя)))
{
while ((Строка = readfile.ReadLine()) != null)
{
Массив_Строк. Add(Строка);
}
readfile.Close();
}
2. Запись в файл:
using (System.IO.StreamWriter writefile = new System.IO.StreamWriter(@Вернуть_Дирректорию_Файла_Для_Записи_По_Имени_Героя (Имя_Героя)))
{
writefile.WriteLine("public void e" + Имя_Героя + "()");
writefile.WriteLine("{");
foreach (Tuple Значения in Таблица_Значений)
{
if (Значения. Item5.Length > 4)
writefile.WriteLine(Значения. Item1 + "(" + Значения. Item2 + "," + Значения. Item3 + "," + Значения. Item4 +
"); notes" + Значения. Item1 + "ListNote.Add(\"" + Значения. Item5 + "\");");
else
writefile.WriteLine(Значения. Item1 + "(" + Значения. Item2 + "," + Значения. Item3 + "," + Значения. Item4 + ");");
}
writefile.WriteLine("}");
writefile.Close();
}
Решение лежало на поверхности и проблема возникла из-за незнания тонкостей языка C#.
Возьмите такое решение себе на заметку, может пригодится и не придется ломать голову.
вы открываете файл каждый раз заного для чтения\перезаписи\дозаписи - открывайте файл сразу со всеми нужными режимами... т. е. и на чтение и на запись и на создание (создание - на случай отсутствия искомого файла, если его отсутствие не должно вызывать ошибки)
ой ёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёё
ОЧЕНЬ СЛОЖНО!!
FileStream sn = new FileStream("ВАШФАЙЛ. РАСШИРЕНИЕ", FileMode.OpenOrCreate,FileAccess.ReadWrite);
StreamWriter sn_write = new StreamWriter(sn);
StreamReader sn_read = new StreamReader(sn);
//Закрытие потока
sn.Close();
Такой геморой с текстовыми файлами. УЖАС!!!!