Редактирование существующего файла - 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); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д