习惯在路径加上Application.StartupPath
今天在写程序的时候发现了一个很无奈的错误,找了2、3个钟,最后找同事,搞了1个钟,到最后才发现原来是路径的问题。先写个简单的程序:
1、新建“windows应用程序”工程。
2、在工程目录的bin\Debug下新建一个018.txt,往里写一个行字“能读到我吗?”。
3、添加一个OpenFileDialog控件。改名为openFileDialog。
4、添加一个按钮,在按钮点击事件里添加下面代码:
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
MessageBox.Show("你选中了:" + openFileDialog.FileName);
reader = new ("018.txt", Encoding.Default);
MessageBox.Show("018.txt内容:" + reader.ReadLine());
}
5、运行,点击按钮,选择不是bin\Debug下的文件。 结果“ reader = new ("018.txt", Encoding.Default);”出现异常。如果
reader = new ("018.txt", Encoding.Default);
MessageBox.Show("018.txt内容:" + reader.ReadLine());
放在if的前面就没问题。这是为什么呢?
其实细心一点就可以发现程序的当前目录变了才会出现异常。如果在if前加上
MessageBox.Show("当前目录:" + Environment.CurrentDirectory.ToString());
和在if内加上
MessageBox.Show("当前目录:" + Environment.CurrentDirectory.ToString());
在未选中文件时选中当前目录,到你选中了不是bin\Debug下的文件时,当前目录就变了。
以前老认为new ("018.txt", Encoding.Default);就会在程序目录下查找018.txt文件,今天终于彻底明白,原来是在“当前目录”下查找,“当前目录”是可以改变的。所以习惯在路径加上Application.StartupPath表示程序目录下的×××,如new (Application.StartupPath+@"\018.txt", Encoding.Default);就不会错了。