1

我正在使用 streamwriter 记录错误

它的设计方式(请不要问为什么)是每次应用程序必须记录消息时打开一个新的流写入器。它将所有内容输出到 ./Logs/[current-date].txt,通常解析为“c:\myappfolder\logs[current-date].txt”

一切正常,但是在我使用打开的文件对话框说“C:\home\myfolder\myfile”之后,streamwriter 尝试写入“c:\home\myfolder\logs[current-date].txt”

我知道这个问题的解决方案,但我只是不明白发生了什么

4

3 回答 3

9

当前目录是进程范围的值。

OpenFileDialog正在更改当前目录。

如果您使用的是 .NETOpenFileDialog类,则可以将RestoreDirectory属性设置true为告诉对话框不理会当前目录(尽管RestoreDirectory编写文档的方式可能存在一些线程问题,我想这可能会使这仍然不合适对于伐木设施)。

于 2008-12-15T19:57:39.380 回答
3

正如 Mike B 所说,OpenFileDialog可能会更改当前目录。由于./是相对于电流的,所以它也会改变。

RestoreDirectory属性会修改此行为。

而是做这样的事情:

OpenFileDialog openFileDialog1 = new OpenFileDialog();

OpenFileDialog1.InitialDirectory = "c:\\" ;
openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" ;
openFileDialog1.FilterIndex = 2 ;
openFileDialog1.RestoreDirectory = true ;

取自MSDN

于 2008-12-15T20:02:17.420 回答
2

迈克 B完全正确。

如果您使用的是本机 API 而不是 .NET,则需要在 OPENFILENAME 结构中设置 OFN_NOCHANGEDIR 选项。该文档指出它不适用于 Windows XP,但不确定这是否适用于 .NET 版本。

无论您如何解决此问题,请注意,每次打开文件对话框时,它都会在您的原始文件夹中打开。如果您打开大量文件,治疗可能比疾病更糟糕。您最好在程序启动时获取当前目录,并将其添加到您的文件名中。

于 2008-12-15T20:08:10.763 回答