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

Здравствуйте, я работаю над чем-то, и мне нужно иметь возможность добавлять текст в файл .txt. Хотя у меня это завершено, у меня есть небольшая проблема. Мне нужно написать строку в середине файла более или менее. Пример:

Hello my name is Brandon,
I hope someone can help, //I want the string under this line.
Thank you.

Надеюсь, кто-то может помочь с решением.

Изменить Хорошо, спасибо, ребята, я попытаюсь понять это, возможно, просто переписал весь файл. Хорошо, что программа, которую я делаю, связана с файлом hosts, и не у всех есть один и тот же файл hosts, поэтому мне было интересно, есть ли способ прочитать их файл hosts и скопировать все это, добавив к нему строку

Ответ 1

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

Подумайте о файлах на диске в виде массивов - если вы хотите вставить некоторые элементы в середину массива, вам нужно переместить все следующие элементы вниз, чтобы освободить место. Разница в том, что .NET предлагает удобные методы для массивов и Lists, которые делают это легко сделать. Насколько мне известно, API-интерфейсы ввода-вывода не предлагают таких методов удобства.

Когда вы заранее знаете, что вам нужно вставить середину файла, часто проще просто написать новый файл с измененным контентом, а затем выполнить переименование. Если файл достаточно мал для чтения в память, вы можете сделать это довольно легко с помощью некоторого LINQ:

var allLines = File.ReadAllLines( filename ).ToList();
allLines.Insert( insertPos, "This is a new line..." );
File.WriteAllLines( filename, allLines.ToArray() );

Ответ 2

Это лучший способ вставить текст в середине текстового файла.

 string[] full_file = File.ReadAllLines("test.txt");
 List<string> l = new List<string>();
 l.AddRange(full_file);
 l.Insert(20, "Inserted String"); 
 File.WriteAllLines("test.txt", l.ToArray());

Ответ 3

Проверьте File.ReadAllLines(). Вероятно, самый простой способ.

     string[] full_file = File.ReadAllLines("test.txt");
     List<string> l = new List<string>();
     l.AddRange(full_file);
     l.Insert(20, "Inserted String");
     File.WriteAllLines("test.txt", l.ToArray());

Ответ 4

одним из трюков является транзакция файлов. сначала вы читаете файл до строки, которую хотите добавить текст, но при чтении сохраняйте строки чтения в отдельном файле, например tmp.txt, а затем добавляете нужный текст в tmp.txt(в конце файла) после этого продолжайте чтение из исходного файла до конца. затем замените tmp.txt исходным файлом. в конце вы получили файл с добавленным текстом посередине:)

Ответ 5

Если вы знаете, что индекс строки использует readLine, пока вы не достигнете этой строки и не напишите в ней. Если вы точно знаете, что текст этой строки делает то же самое, но сравнивает текст, возвращаемый readLine, с текстом, который вы ищете, а затем записываете в этой строке.

Или вы можете искать индекс указанной строки и писать после нее с помощью escape-последовательности\n.

Ответ 6

Как уже упоминалось, нет способа переписать файл после точки вновь вставленного текста, если вы должны придерживаться простого текстового файла. Однако, в зависимости от ваших требований, возможно ускорить поиск местоположения, чтобы начать писать. Если вы знали, что вам нужно добавить данные после строки N, вы можете сохранить отдельный "индекс" смещений номеров строк. Это позволит вам напрямую искать нужное место для начала чтения/записи.