0

我可以将 SaveFileDialog 的 InitialDirectory 属性设置为我的应用程序通常安装的位置,如下所示:

saveFileDialog1.InitialDirectory = @"C:\Program Files\Waltons\Mountains";

...但是作为“每个人群中都有一个”,有些人可能会使用 C 以外的驱动器号作为他们的硬盘驱动器?如何将 InitialDirectory 设置为用户指定的驱动器号?

更新

我尝试了 Alexei 的代码(必须将“Concat”更改为“Combine”并删除多余的“)”:

saveFileDialog1.InitialDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Programs), @"Waltons\Mountains");
DialogResult result = saveFileDialog1.ShowDialog();
if (result == DialogResult.OK)
{
    // TODO: Finish
}

...但它没有打开 C:\Program Files\Waltons\Mountains

更新 2

Saeb 的建议似乎有效,因为保存文件对话框在 C:\Waltons\Mountains\bin\Debug 中打开

...我希望/估计将对应于用户机器上的 C:\Waltons (或 D:\Waltons 或 Z:\Waltons 或其他)。

我将不得不为用户附加我猜想的“\ Maps” - 检查它是否没有在 Visual Studio 或其他东西中运行,并在该事件中附加它。

4

3 回答 3

4

普通用户可写的位置将是保存对话框的更好的默认位置。即通过传递Environment.SpecialFolderEnvironment.GetFolderPath之一的“我的文档” :

var pathToMyDocuments = Environment.GetFolderPath(Environment.SpecialFolder.Personal));

如果您需要默认安​​装程序的位置,例如程序文件

Path.Combine(
     Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "MyFolder");

或者如果您需要相对于程序检查的路径如何在 .NET 控制台应用程序中获取应用程序的路径?.

请注意,除非您关闭 UAC 或明确“以管理员身份运行”或更改这些文件夹的默认权限,否则上述位置不可被普通用户甚至管理员写入(绕过默认权限的任何一种方法都有其缺点,应该进行认真的安全审查如果允许普通用户写入programs/system文件夹)。

于 2014-10-04T04:40:20.513 回答
2

不要使用硬编码的驱动程序字母。在运行时找到路径。例如:

saveFileDialog1.InitialDirectory = AppDomain.CurrentDomain.BaseDirectory;
于 2014-10-04T04:35:48.590 回答
1

您可以使用环境变量 systemroot 来获取驱动器。尝试打开 cmd 提示符并输入 set 以查看所有可用环境变量的列表,然后使用 System.Envrionment.GetEnvironmentVariable ("systemdrive") 并将其与路径的其余部分结合起来。

于 2014-10-04T04:31:44.260 回答