使用 StringBuilder 修改文本会抛出 ArgumentOutOfRangeException

本文关键字:ArgumentOutOfRangeException 文本 StringBuilder 修改 使用 | 更新日期: 2023-09-27 18:36:15

到目前为止,我已经设法创建了我的数据集并将其以适当的格式写入我的文本文件。现在我需要进一步修改该文件的内容以包含一些其他格式。我目前正在尝试使用 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();  

使用 StringBuilder 修改文本会抛出 ArgumentOutOfRangeException

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

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

换句话说,这就是问题所在,因此 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"
ArgumentOutOfRangeException 

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

StringBuilder.Remove Method

最好在运行前检查您的 C:test.txt

因为字符串不是那么长

相关文章:
  • 没有找到相关文章