Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/107: Рейтинг темы: голосов - 107, средняя оценка - 4.82
6 / 6 / 3
Регистрация: 22.06.2010
Сообщений: 320

Как добавить в определенное место файла новую строку.

25.05.2011, 11:42. Показов 20604. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как добавить в определенное место файла новую строку, т.е. чтобы записать инф в файл не в конец файла а между строками?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.05.2011, 11:42
Ответы с готовыми решениями:

Добавить в определенное место текстового файла строку
Имеется текстовый файл. Добавить в него строку из двенадцати черточек (————), разместив ее: • после пятой строки; • после последней...

Как добавить новую строку в конец файла?
WriteToFile("studentsapp22.txt", rcet.getText().toString()); Данная строка лишь перезаписывает файл, а мне очень нужен список в...

Как добавить текстовый файл в определенное место системы?
В гугле какая-то дичь, помогите пожалуйста Добавлено через 27 минут И да, нужно что бы администратор это подтвердил

8
 Аватар для exe-dealer
308 / 161 / 11
Регистрация: 07.06.2009
Сообщений: 538
25.05.2011, 11:58
если файл маленький, то загрузить весь файл, разбить на 2 строки - перед новой строкой и после, законкатеначить все три строки и положить обратно в файл.

если файл большой то тогда поблочно сдвинуть данные чтобы образовалось место куда положить новую строку. потом перевести положение потока на то место и положить туда новую строку целиком.

upd хотя может и есть вариант создать новый фрагмент файла на диске в котором и будет новая строка
0
Заблокирован
25.05.2011, 11:58
C#
1
2
3
4
5
6
7
8
9
             // читаем
            string[] readText = System.IO.File.ReadAllLines(@"d:\test.txt",Encoding.Default);
            // нам допустим необходимо вставить строку после пятой.
            readText[4] = readText[4] + Environment.NewLine + "Новая строка";
            using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"d:\test.txt", false))
            {
                foreach(string s in readText)
                file.WriteLine(s);
            }
1
68 / 66 / 19
Регистрация: 27.12.2008
Сообщений: 212
25.05.2011, 15:40
вариант 3G хорош, но:
1. не сработает если файл пуст
2. не учитывает строк, которые не заканчиваются переносом строки (т.е. последней)
3. невозможно вставить в начало
4. если нужно вставить в конец, то будет добавлена еще одна пустая строка (т.к. WriteLine добавляет перенос строки для всех строк)

вот вариант немного по длинней, но с учетом этих моментов + пара дополнительных проверок:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// 30 означает что в 30 строку, а не после нее (1 - в первую строку)
insertLineToFile("proba.txt",30,"abc");
 
private void insertLineToFile(String path, int line, String text)
        {            
            //уменьшить, т.к. нумерация с единицы и если номер отрицательный - указать начало файло
            if (--line < 0) line = 0;
 
            //текст из файла
            String textFile = System.IO.File.ReadAllText(path, Encoding.Default);
 
            //если нужно вставить в начало файла, либо файл пуст
            if (line == 0 || textFile=="")
            {
                //в случае пустого файла
                if (textFile == "") textFile = text;
                else textFile = text + Environment.NewLine + textFile;
 
            }
            else
            {
                //разбиение по строкам
                //для работы нужно подключить using System.Text.RegularExpressions;
                MatchCollection matches = Regex.Matches(textFile, "^.*$", RegexOptions.Multiline);               
 
                //если в файле строк меньше чем указанная
                if (line >= matches.Count){
                    textFile +=Environment.NewLine+text;
                }
                else{
                    textFile = textFile.Substring(0, matches[line].Index)+text+textFile.Substring(matches[line].Index);
                }
 
            }
            
            using (System.IO.StreamWriter file = new System.IO.StreamWriter(path, false))
            {
                file.Write(textFile);
            }
            
        }
0
Заблокирован
25.05.2011, 15:58
Цитата Сообщение от Xero201 Посмотреть сообщение
3. невозможно вставить в начало
C#
1
 readText[0] = "Новая строка" + Environment.NewLine + readText[0];
0
68 / 66 / 19
Регистрация: 27.12.2008
Сообщений: 212
25.05.2011, 16:01
речь идет не о том, что ты не знаешь как добавить первую строку, а о том, что в предложенном варианте этого не было
+ как на счет остальных пунктов?)
0
Заблокирован
25.05.2011, 16:24
Цитата Сообщение от Xero201 Посмотреть сообщение
как на счет остальных пунктов?
Остальные несущественные. Всегда можно сделать проверку на кол-во строк в файле. Дополнительная пустая строка в конце файла тоже ничего не значит. Накрайняк весь код можно заключить в блок try { }- catch { }.
0
68 / 66 / 19
Регистрация: 27.12.2008
Сообщений: 212
25.05.2011, 16:43
Существенно- не существено, конечно все зависит от задачи. Просто хочется, чтобы в результате на форуме сохранился универсальный метод, чтобы если понадобиться - прийти и взять, а не сидеть потом и отлавливать все нюансы.

Кстати, если уж пользоваться регулярными выражениями, то можно и не разбивать на все строки, а только найти (не найти) указанную:
C#
1
2
3
4
5
6
7
8
Match match = Regex.Match(textFile,  @"(?:.*?\n){"+line+"}(.*?\n)", RegexOptions.Singleline);
                if (match.Success)
                {                    
                    textFile = textFile.Substring(0, match.Groups[1].Index) + text + Environment.NewLine + textFile.Substring(match.Groups[1].Index);
                }
                else {
                    textFile += Environment.NewLine + text;
                }
0
6 / 6 / 3
Регистрация: 22.06.2010
Сообщений: 320
27.05.2011, 14:57  [ТС]
я сделал следующим образом, регулярные выражения еще не изучал:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 /// <summary>
        /// Запись в файл
        /// </summary>
        /// <param name="fileName">имя файла</param>
        public void addToFile(string fileName)
        {
            // Создание файла и запись в него
            if (!File.Exists(fileName))
            {
                StreamWriter sw = File.CreateText(fileName);
                sw.WriteLine(ToString());
                sw.WriteLine();
                sw.Close();
            }
            //если файл существует, дописываем
            else
            {
                string[] readText = File.ReadAllLines(fileName, Encoding.UTF8);
                                
                using (StreamWriter sw = new StreamWriter(fileName, true))
                {
                    //если массив пустой добавляем первую строку в файл
                    if (readText.Length == 0)
                        sw.WriteLine(ToString());
                    //дописываем перед последней строкой
                    else if (readText.Length == 1)
                    {
                        readText[0] = readText[0] + Environment.NewLine + ToString();
                        for (int i = 0; i < readText.Length; i++ )
                            sw.WriteLine(readText[i]);
                    }
                    else if (readText.Length >= 2)
                    {
                        readText[readText.Length - 1] = readText[readText.Length - 1] + Environment.NewLine + ToString();
                        for(int i = 0; i < readText.Length; i++)
                            sw.WriteLine(readText[i]);
                    }
                        sw.Close();
                }//using
            }//else
        }
В методе Main сдкл цикл из 5, чтобы ввести 5 раз доходы и дату, но у меня почему то в файле не 5 строчек становится а намного больше, т.е. некоторые строчки по несколько раз записываются. Что ни так

Вот отрывок самого Main:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for (int i = 0; i < 5; i++)
            {
                Console.WriteLine("Введите доход или расход:");
                string amount = Console.ReadLine();
 
                Console.WriteLine("Введите дату");
                string date = Console.ReadLine();
 
                me.initWithString(amount, date);
 
                Console.WriteLine(me.ToString());
                //добавляем в файл доход и расход
                me.addToFile(fileName);
}
C#
1
2
3
4
public override string ToString()
        {
            return string.Format("{0} от {1}", _amount, EntryDate);
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.05.2011, 14:57
Помогаю со студенческими работами здесь

PHPExcel: Данные из формы добавить в новую строку файла
Помогите, у меня есть форма, из которой данные должны добавиться в уже существующий файл в новую строку, как это осуществить?

Добавить число на определенное место массива
Размер легко изменить Действия 1)Добавь число на определенное место 2)Добавить число в место индекса 3)Вывод массива...

Добавить элемент в определенное место списка
Всем привет! Совсем запутался.. Есть список ArrayList.. В нем есть элементы 1,2,3,5,6. Как мне поставить элемент на 4ый индекс? Какой метод...

Добавить в указанное место файла заданное количество строк, начиная с указанного места другого файла. Место задаётся номером строки.
Добавить в указанное место файла заданное количество строк, начиная с указанного места другого файла. Место задаётся номером строки.

Вставить строку в строку в определенное место
Нужно вставить строку в строку между &lt;/configSections&gt; и &lt;startup&gt;. Как по-корректнее сделать, просьба без парсинга xml, там особый...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru