我在网上搜索但未能找到正确的例子。
目标是拥有一个功能:
private void InsertLine(string source, string position, string content)
使用StreamWriter写入文件,因此您不需要读取所有行,因为我的文件可能很大。
到目前为止我的功能:
private void InsertLine(string source, string position, string content)
{
if (!File.Exists(source))
throw new Exception(String.Format("Source:{0} does not exsists", source));
var pos = GetPosition(position);
int line_number = 0;
string line;
using (var fs = File.Open(source, FileMode.Open, FileAccess.ReadWrite))
{
var destinationReader = new StreamReader(fs);
var writer = new StreamWriter(fs);
while (( line = destinationReader.ReadLine()) != null)
{
if (line_number == pos)
{
writer.WriteLine(content);
break;
}
line_number++;
}
}
}
该功能在文件中不起作用,因为没有任何反应。
答案 0 :(得分:4)
您不能只是在文件中插入一行。文件是一个字节序列。
你需要:
这里有一些基于你的未经测试的代码:
private void InsertLine(string source, string position, string content)
{
if (!File.Exists(source))
throw new Exception(String.Format("Source:{0} does not exsists", source));
// I don't know what all of this is for....
var pos = GetPosition(position);
int line_number = 0;
string line;
using (var fs = File.Open(source, FileMode.Open, FileAccess.ReadWrite))
{
var destinationReader = new StreamReader(fs);
var writer = new StreamWriter(fs);
while (( line = destinationReader.ReadLine()) != null)
{
writer.WriteLine(line); // ADDED: You need to write every original line
if (line_number == pos)
{
writer.WriteLine(content);
// REMOVED the break; here. You need to write all following lines
}
line_number++; // MOVED this out of the if {}. Always count lines.
}
}
}
但是,这可能不会像预期的那样奏效。您正在尝试写入您正在阅读的同一个文件。您应该打开一个新的(临时)文件,执行复制+插入,然后移动/重命名临时文件以替换原始文件。
答案 1 :(得分:-1)
此代码将帮助您在希望的行号上插入文本
string path ="<Path of file>"
List<string> lines = System.IO.File.ReadAllLines(path).ToList<string>();
//give the line to be inserted
lines[10]="New String";
System.IO.File.WriteAllLines(path, lines);