C#程序 Debugger,Release都没问题,但是,打包安装后:System.FormatException: 输入字符串的格式不正确

前言:
这是个问题解决,我们先谈问题:

这个问题不会再本地的调试机器上出现,但是,出现在你部署,或者说安装到其他的机器(通过VS构建安装项目来做)
C#程序 Debugger,Release都没问题,但是,打包安装后,报错, 应用程序发生了未经处理的异常。如果点击“继续”应用程序将立即关闭。System.FormatException: 输入字符串的格式不正确。 导致接收数据失败 


原因:

 笔者出现这个问题的根本原因,花了很长时间才找到:
 

          int imagecount = Convert.ToInt32(ini.ReadValue("Config", "SaveImage"));

这段代码的作用,是从一个配置文件读取保持的图像的数量,然后就是这里,你本地VS上跑完全没问题,但是,一旦安装就有问题。 

使用了 Convert.ToInt32 方法来将从配置文件读取的字符串转换为整数。这个方法在内部实际上是调用了 int.Parse 方法,所以如果配置文件中的字符串不是有效的整数格式,同样会抛出 System.FormatException 异常。

错误的代码:
 

 private void ReadConfig()
        {
            string Current;
            Current = Directory.GetCurrentDirectory();//获取当前根目录
            RWIni ini = new RWIni(Current + "//config.ini");
            PubVar.Password = ini.ReadValue("Config", "Password");
            // PubVar.SaveImage = Convert.ToInt32(ini.ReadValue("Config", "SaveImage"));
            // PubVar.SaveDataPath1 = ini.ReadValue("Config", "SaveDataPath1");

            PubVar.SaveImageNumMax = Convert.ToInt32(ini.ReadValue("Config", "SaveImageNumMax"));
            PubVar.SaveImageDaysMax = Convert.ToInt32(ini.ReadValue("Config", "SaveImageDaysMax"));

        }

修改后:
 

private void ReadConfig()
{
    string Current;
    Current = Directory.GetCurrentDirectory(); // 获取当前根目录
    RWIni ini = new RWIni(Current + "//config.ini");
    PubVar.Password = ini.ReadValue("Config", "Password");
    // PubVar.SaveImage = Convert.ToInt32(ini.ReadValue("Config", "SaveImage"));
    // PubVar.SaveDataPath1 = ini.ReadValue("Config", "SaveDataPath1");

    if (!int.TryParse(ini.ReadValue("Config", "SaveImageNumMax"), out int saveImageNumMax))
    {
        throw new FormatException("配置文件中的 SaveImageNumMax 值格式不正确。");
    }
    PubVar.SaveImageNumMax = saveImageNumMax;

    if (!int.TryParse(ini.ReadValue("Config", "SaveImageDaysMax"), out int saveImageDaysMax))
    {
        throw new FormatException("配置文件中的 SaveImageDaysMax 值格式不正确。");
    }
    PubVar.SaveImageDaysMax = saveImageDaysMax;
}


解决方案1:

使用TryParse或TryParseExact方法代替Parse,


解决方案2 : 

 


解决方案源码: 

int.TryParse(data[0], out int angle)
double.TryParse(data[1], out double error)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Franklin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值