Редактирование существующего файла - C#
Формулировка задачи:
Доброго времени суток!
Я не могу понять почему не выполняется перезапись уже имеющегося файла *.dat. Я считываю с него данные в массив, меняю значение в массиве и хочу перезаписать этот же файл. Но вместо перезаписи получаю просто пустой файл. Может кто скажет почему такая штука происходит?//////////////////////////////////
//считывание уже имеющегося файла + действия со считанным массивом
//////////////////////////////////
FileStream stream = new FileStream(curr_st.Path, FileMode.Open, FileAccess.Read); // создаем поток с файлом
StreamReader sr = new StreamReader(stream, Encoding.Default);
string[] str_mas = new string[9];
int change_id = 0;
// получение содержания файла + нахождение информации о нужном тесте
for (int i = 0; i < 9; i++)
{
str_mas[i] = sr.ReadLine();
if (str_mas[i] == t_name)
change_id = i;
}
//////////////////////////////////
//закрытие потоков
//////////////////////////////////
sr.Close();
stream.Close();
//////////////////////////////////
//редактирование массива перед перезаписью
//////////////////////////////////
// смена оценки
str_mas[change_id + 1] = mark.ToString();
//////////////////////////////////
//открытия новых потоков для перезаписи
//////////////////////////////////
// запись обновлённой информации в файл
stream = new FileStream(curr_st.Path, FileMode.Create, FileAccess.Write); // создаем поток с файлом
StreamWriter sw = new StreamWriter(stream, Encoding.Default);
for (int i = 0; i < 9; i++)
sw.WriteLine(str_mas[i]);
//////////////////////////////////
//закрытие потоков
//////////////////////////////////
sr.Close();
stream.Close();
//////////////////////////////////
//прочие действия
//////////////////////////////////
// обновление значения текущей сессии
switch (change_id)
{
case 1:
curr_st.results_mas[0] = mark;
break;
case 3:
curr_st.results_mas[1] = mark;
break;
case 5:
curr_st.results_mas[2] = mark;
break;
case 7:
curr_st.results_mas[3] = mark;
break;
default:
throw (new Exception("Ошибка индекса перезаписи текущей сессии."));
}Решение задачи: «Редактирование существующего файла»
textual
Листинг программы
string path = @"E:\test.txt";
string t_name = "5 4";
string mark = $"{t_name} 3";
List<string> strList = new List<string>();
using (StreamReader sr = new StreamReader(File.Open(path,
FileMode.Open), Encoding.Default))
{
while (!sr.EndOfStream)
strList.Add(sr.ReadLine());
}
var change_id = strList.IndexOf(t_name);
using (StreamWriter sw = new StreamWriter(File.Open(path,
FileMode.Create), Encoding.Default))
{
foreach (var s in strList)
{
var str = s != t_name ? s : mark;
sw.WriteLine(str);
}
}