【问题标题】:Keep getting "Input string not in correct format" when trying to read data from a text file using StreamReader尝试使用 StreamReader 从文本文件中读取数据时,不断收到“输入字符串格式不正确”
【发布时间】:2018-04-07 09:50:04
【问题描述】:

当我仍在使用 double.parse 或 int.parse 分别代替 ConvertToDoubleConvertToInt32 时,我遇到了错误。 代码如下:

         ArrayList Webpages = new ArrayList();
         String FileName = "Medium.txt";
         StreamReader newSR = new StreamReader(FileName);
         while (!newSR.EndOfStream)
         {
             string[] data = (newSR.ReadLine()).Split(',');
             Webpage newEntry = new Webpage();
             newEntry.size = Convert.ToDouble(data[0]);
             newEntry.visitCount = Convert.ToInt32(data[1]);
             newEntry.name = data[2];
             Webpages.Add(newEntry);
         }

还有文本文件:

5.26,46,WebPage1
7.44,76,WebPage2
8.35,42,WebPage3
46.2,9,WebPage4
12.44,124,WebPage5
10.88,99,WebPage6
10.66,984,WebPage7

这是我的错误信息:

“System.FormatException”类型的未处理异常发生在 mscorlib.dll

附加信息:输入字符串的格式不正确。 我收到以下错误消息:newEntry.size = Convert.ToDouble(data[0])

【问题讨论】:

  • 你有没有调试过data[0]失败时的值? (我想知道您是否正在读取文件末尾的空白行。)您是否可能处于小数分隔符为 , 而不是 . 的文化中?
  • 试过你的代码,除了我没有使用你的网页 newentry 对象外,它的工作原理,它是什么??

标签: c# streamreader formatexception


【解决方案1】:

计算机文化会影响您的分隔符类型。在这种情况下,如果分隔符为 .,您可以添加 InvariantCulture 选项。

    newEntry.size = Convert.ToDouble(data[0], CultureInfo.InvariantCulture);

如果有空行,文件结尾也可能导致错误。这种方式可以更安全。

 while (!newSR.EndOfStream)
 {
     string line = newSR.ReadLine();
     if(string.IsNullOrEmpty(line)
         break;
     string[] data = (line).Split(',');
     ............

【讨论】:

  • 如果分隔符是,.,则double.ParseConvert.ToDouble 都不会抛出System.FormatException。他们只是错误地解析了值。所以文化相关的分隔符在这里不是问题
猜你喜欢
  • 2014-01-17
  • 1970-01-01
  • 2020-02-29
  • 2023-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
  • 1970-01-01
相关资源
最近更新 更多