«

»

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,问题解决了。

1 星2 星3 星4 星5 星 (尚无评分)
Loading...Loading...

相关文章

AssemblyVersion和AssemblyFileVersion的区别 在VS .net项目属性的程序集信息里,有程序集版本和文件版本,这两者有何区别呢?简而言之,AssemblyVers...
两段自动检测网页编码的C#代码 使用C#访问网页时,如何检测网页的编码是必须解决的问题。实测下面两段代码并不是百分百可靠,某些页面...
DataGridView控件的AutoSize 模式不能设置为 Fill 在C#中将DataGridView控件的AutoSizeColumnsMode设为Fill时,出现错误提示:列 AutoSize 模式不能设置为...
一个C#提取a标签的href及innerhtml的正则 正则表达式主要用于文本处理,其特点是灵活性、逻辑性和功能性非常的强,可以迅速地用极简单的方式达到...
C#在HttpWebRequest中增加Header 许多具有跨平台能力的语言的最大缺憾,是对不同操作系统下图形界面编程支持不佳。这其实也很好理解,不...
在C#的form构造函数中结束程序的问题 编写一个Windows窗体程序,准备在form()中读取配置,若配置文件不存在,则退出程序。此处使用了applicat...
.net framework与其Client Profile版本的区别 从.Net 3.5开始,我们在Visual Studio中指定目标框架时,多出来了一个相应.net框架版本的Client Profile...
Path.GetTempFileName()的问题及替代函数 项目内需要生成压缩文件,考虑到winrar的流行,何不直接调用rar压缩算法解决问题?研究之下才发现,rar...

发表评论

电子邮件地址不会被公开。