【发布时间】:2017-06-07 07:42:58
【问题描述】:
我有一部分程序具有生成代码 (HelmID) 的方法,要生成它,我必须从文本文件中读取以获取最新的 HelmID。这是我的文本文件。
T001#C001#H001#FullFace#S001#
T001#C001#H002#FullFace#S002#
问题是,该方法不会生成到 H003(在 H002 之后)并给出错误消息“索引超出数组范围”。这是我的方法代码。
public string newHelmetCode()
{
string Str, HelmetCode;
int HelmetInt;
string[] strArray = new string[5];
if (new FileInfo("TransDetail.txt").Length == 0)
{
HelmetCode = "H001";
return HelmetCode;
}
else
{
Str = File.ReadLines("TransDetail.txt").Last();
strArray = Str.Split(new string[] { "#" }, StringSplitOptions.None);
HelmetCode = strArray[2].Substring(1, 3);
HelmetInt = Convert.ToInt32(HelmetCode) + 1;
if (HelmetInt <= 9)
{
HelmetCode = "H00" + HelmetInt.ToString();
}
else if (HelmetInt <= 99)
{
HelmetCode = "H0" + HelmetInt.ToString();
}
else if (HelmetInt <= 999)
{
HelmetCode = "H" + HelmetInt.ToString();
}
return HelmetCode;
}
}
错误来自此代码HelmetCode = strArray[2].Substring(1, 3);。它应该产生原因我正在使用 Substring(并转换为 int)来获取文本文件最后一行的最新数字。任何回复都会适用
【问题讨论】:
-
最后一行之后是否有换行符?
-
语句Str = File.ReadLines("TransDetail.txt").Last();之后的'Str'的内容是什么?
-
请调试代码并确保错误来自 HelmetCode = strArray[2].Substring(1, 3);。确保文本文件中的最后一行不为空
-
顺便说一句,你不需要
if...else if...else if...部分,这就足够了:HelmetCode = "H" + HelmetInt.ToString("D3") -
感谢 user2960398 和 Romano Zumbe,在 H002 之后有一个空行,因为我在流写入器上使用 writeline,导致出现空行