我想将文本从一个文本文件插入到另一个文本文件中。
例如,我在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
提前致谢!
答案 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
阅读的事实有关,看起来你认为它已经是插入文本的文本。