Редактирование существующего файла - 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);
                }
            }

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


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

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

5   голосов , оценка 3.4 из 5
Похожие ответы