使用StringBuilder修改文本会抛出ArgumentOutOfRangeException

时间:2015-01-06 01:41:33

标签: c#

到目前为止,我已经设法创建了我的数据集并将其编写为适当的格式到我的文本文件中。现在我需要进一步修改该文件的内容以包含一些额外的格式。我目前正在尝试使用StringBulders来执行此操作,但每当我编译程序进行测试时,它会在遇到Remove命令时抛出OutofRange异常。

代码段如下:

var editing = File.ReadAllLines(@"C:\\test.txt");

StringBuilder Editions = new StringBuilder(400);

Editions.Append(editing);
Editions.Insert(0, "0");
Editions.Insert(1, "0");
Editions.Remove(9, 14); // <== exception here
Editions.Insert(11, "R");
Editions.Insert(12, "M");
Editions.Insert(13, "A");
Editions.Insert(14, "L");
Editions.Insert(15, "L");
Editions.Insert(16, " ");
Editions.Insert(17, " ");
Editions.Insert(18, " ");
Editions.Insert(193, "C");
Editions.Insert(194, "L");
Editions.ToString();  

3 个答案:

答案 0 :(得分:6)

File.ReadAllLines()的调用返回一个字符串数组。

当您使用Append()方法将字符串数组直接附加到StringBuilder时,它会在字符串数组上隐式调用ToString(),它会在StringBuilder中存储字符串数组的完整类名。 / p>

换句话说,这就是问题所在,因此StringBuilder中的值比您想象的要短得多:

var editing = File.ReadAllLines(@"C:\test.txt");

sb.Append(editing);  // stores "System.String[]"

另一种方法是使用将文件作为一个长字符串返回的方法:(不应该是文件很小的问题,但你可能不想读取所有文本如果它是一个巨大的文件,立刻

var editing = File.ReadAllText(@"C:\test.txt");

sb.Append(editing);  // stores "SampleLine1\r\nSampleLine2\r\nSampleLine3"

答案 1 :(得分:2)

ArgumentOutOfRangeException 

如果startIndex或length小于零,或者startIndex + length大于此实例的长度。

StringBuilder.Remove Method

在运行

之前,最好检查一下C:test.txt

答案 2 :(得分:1)

因为字符串不长