Добавление строки в середину файла с помощью .NET - PullRequest
11 голосов
/ 11 января 2010

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

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

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

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

Ответы [ 6 ]

13 голосов
/ 11 января 2010

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

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

var allLines = File.ReadAllLines( filename ).ToList();
allLines.Insert( insertPos, "This is a new line..." );
File.WriteAllLines( filename, allLines.ToArray() );
5 голосов
/ 31 августа 2012

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

 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());
2 голосов
/ 11 января 2010

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

2 голосов
/ 11 января 2010

Извлечь 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());
0 голосов
/ 11 января 2010

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

0 голосов
/ 11 января 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...