【发布时间】:2016-11-13 06:20:33
【问题描述】:
有没有办法在C:\Users\Public\Documents 文件夹中启动OpenFileDialog?
我正在使用 DotNet 框架编写 C# 应用程序。我正在尝试使用"C:\\Users\\Public\\Documents\\" 的InitialDirectory 和"world.txt" 的FileName 启动OpenFileDialog。不幸的是,OpenFileDialog 让我进入了Documents 快捷方式而不是C:\Users\Public\Documents。
预期结果
我希望看到 OpenFileDialog 打开,顶部文本框显示 > This PC > Windows7_OS (C:) > Users > Public > Documents ,底部文本框显示 world.txt 。我希望如果我点击顶部的文本框,它将显示 C:\Users\Public\Documents 。
实际结果
打开文件对话框打开。顶部文本框显示 > This PC > Documents ,底部文本框显示 world.txt 。如果我单击顶部文本框,它会显示 Documents 。显示的文件夹内容不与C:\Users\Public\Documents的内容相同。
我尝试过的事情
在以下代码行之后,我已停止 Visual Studio 调试器中的代码:OpenFileDialog dlg = new OpenFileDialog();
在即时窗口中,我执行了如下代码:
dlg.FileName = "world.txt"
? dlg.FileName
dlg.InitialDirectory = "C:\\NonExistentDirectory\\";
dlg.ShowDialog();
dlg.InitialDirectory = "C:\\";
dlg.ShowDialog();
dlg.InitialDirectory = "C:\\Users\\";
dlg.ShowDialog();
dlg.InitialDirectory = "C:\\Users\\Public\\";
dlg.ShowDialog();
dlg.InitialDirectory = "C:\\Users\\Public\\Documents\\";
dlg.ShowDialog();
我取消了每个对话框。
我在C:\和C:\Users\和C:\Users\Public和C:\Users\Public\Documents\之间使用了C:\WINDOWS\System32\cmd.exe到cd。
我尝试过的事情的结果
当
dlg.InitialDirectory = "C:\\NonExistentDirectory\\"时,对话框的文件夹最初显示为This PC > Documents > Visual Studio 2015 > Projects > SimpleGame > Controller > bin > Debug"。单击文本框会使其显示C:\Users\Owner\Documents\Visual Studio 2015\Projects\SimpleGame\Controller\bin\Debug。因此,我假设OpenFileDialog通过不更改目录以静默方式处理无效的InitialDirectory。在这种情况下,它默认为我项目的程序集的 bin 的Debug文件夹。当
dlg.InitialDirectory为"C:\\"或"C:\\Users\\"或"C:\\Users\\Public\\"时,对话框按预期运行。单击顶部文本框会分别生成C:\或C:\Users或C:\Users\Public。当
dlg.InitialDirectory = "C:\\Users\\Public\\Documents\\"时,对话框的行为不正确。顶部文本框显示> This PC > Documents底部文本框显示world.txt。如果我单击顶部文本框,它会显示Documents。显示的文件夹内容不与C:\Users\Public\Documents的内容相同。使用
cmd.exe可以让我在文件夹之间按预期使用cd,包括C:\Users\Public\Documents。
我的环境
我正在使用 Microsoft Visual C# 2015 运行 Microsoft Visual Studio Community 2015 版本 14.0.23107.0 D14REL。我的操作系统是 Windows 10 Pro。
【问题讨论】:
-
可能是一种特权?你试过以管理员身份运行 vs 吗?
-
我也在使用 Windows 10 Pro 并且可以确认此行为。请注意,如果您使用
dlg.InitialDirectory = "C:\\Users\\Public\\Music\\";或dlg.InitialDirectory = $"C:\\Users\\{Environment.UserName}\\Documents\\";,则对话框将打开到相应的库。但是,如果您指定作为自定义库一部分的目录的路径,则对话框将打开到该物理目录。当打开到属于具有KNOWNFOLDERID的库的一部分的目录时,对话框可能正试图变得“智能”。 -
您是否尝试过使用
Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments)检索目录? -
@TheodorosChatzigiannakis --
dlg.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments); dlg.ShowDialog();也会产生不需要的Documents。GetFolderPath是"C:\\Users\\Public\\Documents"。 -
@Noctis -- 我拥有在
C:\Users\Public\Documents文件夹中创建/修改/读取/写入/列出et cetera 文件所需的所有权限。我可以使用cmd.exe来做到这一点。
标签: c# .net openfiledialog