C#将文本从一个txt文件插入另一个txt文件

时间:2014-10-22 15:32:20

标签: c# text insert

我想将文本从一个文本文件插入到另一个文本文件中。

例如,我在C:\ Users \ Public \ Test1.txt

中有一个文本文件
first
second
third
forth

我在C:\ Users \ Public \ Test2.txt

上有第二个文本文件
1
2
3
4

我想将Test2.txt插入Test1.txt

最终结果应为:

first
second
1
2
3
4
third
forth

应该插在第三行。

到目前为止,我有这个:

string strTextFileName = @"C:\Users\Public\test1.txt";
int iInsertAtLineNumber = 2;
string strTextToInsert = @"C:\Users\Public\test2.txt";
ArrayList lines = new ArrayList();
StreamReader rdr = new StreamReader(
    strTextFileName);
string line;
while ((line = rdr.ReadLine()) != null)
    lines.Add(line);
rdr.Close();
if (lines.Count > iInsertAtLineNumber)
    lines.Insert(iInsertAtLineNumber,
       strTextToInsert);
else
    lines.Add(strTextToInsert);
StreamWriter wrtr = new StreamWriter(
    strTextFileName);
foreach (string strNewLine in lines)
    wrtr.WriteLine(strNewLine);
wrtr.Close();

然而,当我运行它时,我得到了这个:

first
second
C:\Users\Public\test2.txt
third
forth

提前致谢!

2 个答案:

答案 0 :(得分:0)

如果不改变您的结构或类型太多,您可以创建一个方法来读取行

public ArrayList GetFileLines(string fileName)
{
    var lines = new ArrayList();
    using (var rdr = new StreamReader(fileName))
    {
        string line;
        while ((line = rdr.ReadLine()) != null)
            lines.Add(line);
    }
    return lines;
}

在您没有阅读第二个文件的问题中,在下面的示例中,您可以更轻松地确定何时阅读文件并阅读每个文件:

string strTextFileName = @"C:\Users\Public\test1.txt";
int iInsertAtLineNumber = 2;
string strTextToInsert = @"C:\Users\Public\test2.txt";
ArrayList lines = new ArrayList();

lines.AddRange(GetFileLines(strTextFileName));

lines.InsertRange(iInsertAtLineNumber, GetFileLines(strTextToInsert));

using (var wrtr = new StreamWriter(strTextFileName))
{
    foreach (string strNewLine in lines)
        wrtr.WriteLine(strNewLine);
}

注意:如果您包装阅读器或写入using语句,它将自动关闭

我还没有对此进行测试,可以做得更好,但希望这会让你指向正确的方向。该解决方案将完全重写第一个文件

答案 1 :(得分:0)

您可以使用File帮助程序类中的方法,而不是使用StreamReaders / Writers

const string textFileName = @"C:\Users\Public\test1.txt";
const string textToInsertFileName = @"C:\Users\Public\test2.txt";
const int insertAtLineNumber = 2;

List<string> fileContent = File.ReadAllLines(textFileName).ToList();
fileContent.InsertRange(insertAtLineNumber , File.ReadAllLines(textToInsertFileName));

File.WriteAllLines(textFileName, fileContent);

List<string>ArrayList更方便。我还重命名了几个变量(最值得注意的是textToInsertFileName,并删除了前缀混乱的声明,任何现代IDE都会告诉你数据类型,如果你悬停半秒)并用{{1}声明你的常量}。


你原来的问题与你永远不会从const阅读的事实有关,看起来你认为它已经是插入文本的文本。