我可以将SaveFileDialog的InitialDirectory属性设置为我的应用程序通常安装的位置,如下所示:
saveFileDialog1.InitialDirectory = @"C:\Program Files\Waltons\Mountains";
...但是因为“每个人群中都有一个”,有些人可能会使用C以外的驱动器号作为硬盘吗?如何将InitialDirectory设置为用户指定的任何驱动器号?
我尝试了阿列克谢的代码(不得不将“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
Saeb的建议似乎有效,因为保存文件对话框在C:\ Waltons \ Mountains \ bin \ Debug
中打开...我希望/估计对应于用户机器上的C:\ Waltons(或D:\ Waltons或Z:\ Waltons或其他)。
我想要为用户附加“\ Maps” - 检查它是否在Visual Studio中运行,或者在那个事件中追加它。
答案 0 :(得分:4)
普通用户可写的位置对于保存对话框来说是更好的默认位置。即“我的文档”通过Environment.GetFolderPath
传递Environment.SpecialFolder个值之一:
var pathToMyDocuments = Environment.GetFolderPath(Environment.SpecialFolder.Personal));
如果您需要默认安装程序的位置,如程序文件
Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "MyFolder");
或者如果您需要相对于程序检查的路径How can I get the application's path in a .NET console application?。
请注意,除非您关闭UAC或明确“以管理员身份运行”或更改这些文件夹的默认权限,否则普通用户甚至管理员都无法写入上述位置(绕过默认权限的方法有其缺点,应该执行如果允许普通用户在programs
/ system
文件夹中写入,则需要进行严格的安全审核。
答案 1 :(得分:2)
请勿使用硬编码的驱动程序字母。在运行时中查找路径。 e.g:
saveFileDialog1.InitialDirectory = AppDomain.CurrentDomain.BaseDirectory;
答案 2 :(得分:1)
您可以使用环境变量systemroot来获取驱动器。尝试打开cmd提示符并输入set以查看所有可用环境变量的列表,然后使用System.Envrionment.GetEnvironmentVariable(“systemdrive”)并将其与路径的其余部分组合。