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

C#将文本从一个txt文件插入另一个txt文件,c#,text,insert,C#,Text,Insert,我想将文本从一个文本文件插入到另一个文本文件 例如,我在C:\Users\Public\Test1.txt中有一个文本文件 首先 第二 第三 向前地 我还有第二个文本文件,位于C:\Users\Public\Test2.txt 1 2. 3. 4. 我想将Test2.txt插入Test1.txt 最终结果应该是: 首先 第二 1. 2. 3. 4. 第三 向前地 它应该插入到第三行 到目前为止,我有: string strTextFileName = @"C:\Users\Public\t

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

例如,我在C:\Users\Public\Test1.txt中有一个文本文件

首先
第二
第三
向前地
我还有第二个文本文件,位于C:\Users\Public\Test2.txt

1
2.
3.
4.
我想将Test2.txt插入Test1.txt

最终结果应该是:

首先
第二
1.
2.
3.
4.
第三
向前地
它应该插入到第三行

到目前为止,我有:

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();
但是,当我运行它时,我会得到:

首先
第二
C:\Users\Public\test2.txt
第三
向前地

提前谢谢

在不太改变结构或类型的情况下,您可以创建一个方法来读取行

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语句,它将自动关闭


我还没有测试过这一点,它可以做得更好,但希望这能为你指明正确的方向。此解决方案将完全重写第一个文件,而不是使用
StreamReaders
/
Writers
,您可以使用helper类中的方法

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);
const string textFileName=@“C:\Users\Public\test1.txt”;
常量字符串textToInsertFileName=@“C:\Users\Public\test2.txt”;
常数int INSERTATLINENUMBE=2;
List fileContent=File.ReadAllLines(textFileName.ToList();
fileContent.InsertRange(insertalinenumber,File.ReadAllLines(textToInsertFileName));
File.writeAllines(textFileName,fileContent);
列表
数组列表
方便得多。我还重命名了几个变量(最明显的是
textToInsertFileName
,并删除了声明中的前缀,任何现代IDE都会告诉您数据类型(如果您停留半秒钟),并使用
const
声明了常量



您最初的问题与这样一个事实有关,即您从未从
strTextToInsert
中读取,看起来您认为它已经是要插入的文本,而实际上它是文件名

您正在插入(一次)strTextToInsert,而不是它的内容(lines.Add(strTextToInsert);)您实际上并没有读取第二个文件,只是将文件名插入到第一个文件中。