[唠叨两句]一个关于OpenFileDialog 影响 相对路径的问题
今天遇到一个比较怪的问题、同样的代码在XP sp2系统下与 在 Win7系统下的 得到效果竟然不一样,当然相同的代码在不同的操作系统下出现不同效果、至今已经不是第一次遇到了。
闲话没啦,看测试用的代码吧!
测试使用的窗体很简单,就一个按钮,按钮的单击事件如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
/// <summary>
/// 使用OpenFileDialog打开一个文件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn1_Click(object sender, EventArgs e)
{
OpenFileDialog of = new OpenFileDialog();
of.ShowDialog();
FileStream fs = new FileStream("testPath.txt", FileMode.Create, FileAccess.Write);
byte[] buffer = Encoding.UTF8.GetBytes("使用相对路径写入文件");
fs.Write(buffer, 0, buffer.GetLength(0));
fs.Close();
fs.Dispose();
}
代码就如上这些了,下面我说一下我的操作:
一、在XP 操作系统下,使用的是.NET 4。
(1)单击按钮 、打开OpenFileDialog 选中一个文件(非debug目录下的文件) 、单击“取消”,此时 会在debug 文件夹下生成一个 名为“testPath.txt”的文件。————————————毫无疑问得到的效果与预想的是一摸一样的。
删除debug目录下的 testPath.txt 文件
在上述操作完成后 不关闭应用程序的情况下继续进行下述操作:
(2)单击按钮 、打开OpenFileDialog 选中一个文件(非debug目录下的文件) 、单击“打开”(注意此时是打开按钮),嘿嘿… 咿!? 为什么在debug目录下没有生成 名为 testPath.txt的文件呢?
那个testPath.txt去跑到那去呢? 也许你已经猜到了,对、就是在你选择的那个文件的同级目录下呢!有位大侠给出的解释是:
【木鱼
不使用当前目录即可.程序运行的时候有个当前工作目录的说法(可见于快捷方式设置中),这个工作目录不一定是程序所在目录,虽然大部分时候直接双击程序运行的时候都是相同的,但很多情况下会发生变更(比如使用了OpenFileDialog或SaveFileDialog,它们会默认打开当前工作目录并随着用户选择而更改).CurrentDirectory都是获得的当前工作目录.】
是不是很怪啊!!!嘿嘿…
删除刚刚生成的那个 testPath.txt 文件
在上述操作完成后 不关闭应用程序的情况下继续进行下述操作:
(3)还是单击 按钮 这次单击 “取消” 按钮, 大家说 这次 那个“testPath.txt”会在那个目录下产生呢?
呵呵… 这个答案嘛就要靠大家啦。
————————-————————————————换操作系统啦——————————————————
二、在Win7操作系统下,使用的也是.NET 4。
仿照在Xp操作系统下进行的操作 进行:
(4) 仿照(1)步骤,点击 “取消”按钮,也会在debug目录下生成生成 名为 “testPath.txt”文件。————和预想的一样。
删除debug目录下的 testPath.txt 文件
在上述操作完成后 不关闭应用程序的情况下继续进行下述操作:
(5) 仿照(2)步骤, 选择一个非debug 目录下的一个文件,这次点击的是“打开”按钮,这次得到的效果却与在XP操作系统得到的效果不一样,依然是在debug目录下生成的 testPath.txt文件。
不解,不解,不解啊!
——————————————————————好啦,测试完毕。————————————————
唉,这个问题以前怎么就没有发现呢?又长经验啦!嘿嘿…
至于为什么会出现上述效果,我也就不清楚啦, 望大侠指教哦…
作者:誓言
博客:http://www.cnblogs.com/08shiyan
别人写的东西无论是好还是差、至少是一番心血,如有友情传播及转载请标明出处 http://www.cnblogs.com/08shiyan,谢谢。