Вставить данные в текстовый файл - PullRequest
2 голосов
/ 09 декабря 2010

Я хочу вставить данные в некоторые позиции в текстовом файле, не перезаписывая существующие данные.У меня есть два текстовых файла.Файл "one.txt" содержит 1000 строк, файл "two.txt" содержит 10000 строк.Я хочу прочитать содержимое файла «one.txt» и вставить в первые 1000 строк содержимого файла «two.txt» (добавьте содержимое «one.txt» к началу «two.txt»).

Критерии:

  • Минимальный код.
  • Меньше потребления памяти (независимо от языка программирования)
  • Производительность (будет учитываться в зависимости от размера файла).

Ответы [ 3 ]

4 голосов
/ 09 декабря 2010

просто откройте средство чтения потоков для первого файла и средство записи потоков (в режиме добавления) для второго файла. Когда вы читаете первые 1000 строк из первого файла, вставьте их во второй.

Примерно так:

StreamReader sr = new StreamReader("one.txt");
StreamWriter sw = new StreamWriter("two.txt", true);  //true for append
index i = 0;
while (i < 1000) {
     sw.WriteLine(sr.ReadLine());
     i++;
}

Возможно, вы захотите проверить конец файла в StreamReader, но это даст вам общее представление ...

На основании новой информации в ОП:

Вы можете использовать этот же метод, но просто создать новый файл, считывая данные из первого файла, а затем данные из второго файла. Как только он окажется внутри нового файла, замените оригинальный «two.txt».

3 голосов
/ 09 декабря 2010

Если вы не ограничены c #, вы можете просто сделать следующее из командной строки Windows:

copy one.txt + two.txt three.txt

Это создаст нужный вам файл, но он будет называться three.txt.Если вам нужно иметь его в two.txt, вы можете просто переименовать two.txt во что-то другое, а затем добавить копию, добавив two.txt в качестве третьего параметра.

3 голосов
/ 09 декабря 2010

Если вам нужно сделать это только один раз, вот код, который будет делать то, что вы хотите. Я не компилировал это, но я считаю, что нет никаких проблем.

string[] linesOne = File.ReadAllLines(pathToFile1);
string[] linesTwo = File.ReadAllLines(pathToFile2);

List<string> result = new List<string>();
for(int i=0;i<1000;i++)
{
   result.Add(linesOne[i]);
}
result.AddRange(linesTwo);

File.WriteAllLines(pathToFile2, result);

Надеюсь, это поможет вам.

Bob

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