У меня есть файл, содержащий около 2000 строк текста, которые мне нужно добавить несколько строк. Моим первоначальным решением было просто скопировать существующий файл в новый файл, а затем добавить несколько строк в конце его. Это было до тех пор, пока я не понял, что последняя строка в файле всегда должна быть последней строкой. Поэтому теперь мне нужно добавить свои новые строки перед одной строкой текста. Я знаю, что могу просто прочитать весь файл, сохранить его в своей программе, а затем записать все в новый файл с моими дополнительными строками. Но поскольку в файле есть много строк, я хотел бы знать, был ли это лучший способ сделать это.Вставить текст в большой существующий файл
ответ
Вам необходимо скопировать его в новый файл. К сожалению, нет возможности вводить данные в середину файла.
Однако для этого вам не нужно загружать его в память. Вы можете использовать StreamReader
и читать только одну строку за раз, или еще лучше, метод System.IO.File.ReadLines
.
int newLineIndex = 100;
string newLineText = "Here's the new line";
using (var writer = new StreamWriter(outputFileName))
{
int lineNumber = 0;
foreach (var line in File.ReadLines(inputFileName))
{
if (lineNumber == newLineIndex)
{
writer.WriteLine(newLineText);
}
else if (lineNumber > 0)
{
writer.WriteLine();
}
writer.Write(line);
lineNumber++;
}
}
Конечно, это становится значительно проще, если вы согласны с тем, что новая линия всегда будет иметь нулевой индекс. Если это так, у меня возникнет соблазн отказаться от этого, и просто зайдите с простым Stream.CopyTo
после написания первой строки. Но это все равно должно работать.
string newLineText = "Here's the new line";
using (var writer = new StreamWriter(outputFileName))
using (var reader = File.OpenRead(inputFileName))
{
writer.WriteLine(newLineText);
reader.CopyTo(writer.BaseStream);
}
Конечно, существует множество способов для этого, с различными компромиссами. Это всего лишь один вариант.
На самом деле не имеет значения, куда идут новые строки, если они не являются последними строками в файле. И имея это в виду, вы предлагаете мне создать новый файл, записать мои новые строки в начало и затем скопировать старый файл? –
@JesperEvertsson Да, это, наверное, то, что я буду делать. Я добавил немного пример того, как я, вероятно, подумал бы о том, чтобы добавить их в начало. –
Я пробовал использовать второе решение, но для меня добавляет новую строку в конце файла –
, что я могу просто прочитать весь файл, сохранить его в своей программе, а затем записать все в новый файл с моими дополнительными строками.
Не все должно быть написано. Просто напишите вставленные строки и строки после вставленных строк в исходный файл, начиная с позиции (индекс байта) вставленных строк.
Проблема заключается в том, что я не знаю, насколько велика будет файл, и он варьируется от файла к файлу. –
@JesperEvertsson. Прочитайте его в своей проблеме, найдите позицию вставки и напишите новые строки и затронутые линии. –
С точки зрения производительности было бы намного лучше, если бы вы могли добавить новые строки в конец файла, а не добавлять их. Разумеется, вам нужно будет отменить все в своем приложении, если это необходимо. – Robert
@Robert Я знаю, вот почему это было мое первоначальное решение. Но строка, которая в настоящее время является последней строкой, всегда должна быть последней строкой. –