代码之家  ›  专栏  ›  技术社区  ›  Eric

./在我使用OpenFileDialog时更改目标

  •  1
  • Eric  · 技术社区  · 16 年前

    我正在使用流媒体记录器记录错误

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

    一切正常,但在我使用打开的文件对话框说“C:\home\myfolder\myfile”后,流媒体写入器试图写入“C:\home\myffolder\logs[current date].txt”

    我知道这个问题的解决办法,但我就是不明白发生了什么

    3 回复  |  直到 16 年前
        1
  •  9
  •   Michael Burr    16 年前

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

    这个 OpenFileDialog 正在更改当前目录。

    如果你正在使用。导航战鉴定小组 打开文件对话框 类,你可以设置 RestoreDirectory 财产 true 告诉对话框保持当前目录不变(尽管文档的方式 还原目录 可能会有一些线程问题,我想这可能会使它仍然不适合日志记录工具)。

        2
  •  3
  •   biozinc    16 年前

    正如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 .

        3
  •  2
  •   Community CDub    8 年前

    Mike B 绝对正确。

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

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