1. 苏葳的备忘录首页
  2. 编程

OpenFileDialog导致BinaryFormatter失效?

c#  openfiledialog编写一个C#窗体程序时,为了省事,直接用BinaryFormatter.Serialize来保存程序的配置。配置文件名不含路径,因为预期的保存位置就跟可执行文件在同一目录下。所以使用默认路径,在formclosing事件中来进行序列化保存。窗体上还有一个“打开文件”按钮触发打开文件对话框(调用openfiledialog.showdialog()方法),进行一些文件操作。然后在调试时,发现几个奇怪现象:

1 打开程序,马上关闭,发现正确生成配置文件。

2 打开程序,点击“打开文件”按钮,选择一个文件,然后关闭程序,却没有生成配置文件,并且无任何报错。

3 打开程序,点击“打开文件”按钮,选择一个文件,然后不点确定而是点取消,则此时关闭程序仍能正确产生配置文件。

事实上是经过艰苦的调试才定位到openfiledialog.showdialog这个函数调用点。程序运行而未生成配置文件时,却没有任何报错,到底openfiledialog.showdialog做了什么导致BinaryFormatter不能正常工作? 快要绝望之际,在StackOverflow终于搜索到一篇类似现象的文章,一句话解决了问题。 原来问题就在偷懒使用的未加路径的配置文件名上,未加路径,则程序使用默认路径,但这个默认路径在使用openfiledialog选择文件时,被更改了。所以事实就是BinaryFormatter仍然正确的生成了文件,只不过保存在了openfiledialog打开的那个文件的目录下了。 想起前一天晚上为这问题反复测试时,曾经在选择文件对话框里看到过配置文件的名字,当时不在意,以为什么时候不小心拷贝到了那里,现在想起来,如果当时警觉到那个现象,也许很快就找到原因了。 OK,把配置文件名前面加上application.startuppath,问题解决了。

原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/543.html

发表评论

邮箱地址不会被公开。 必填项已用*标注