保存文件对话框设置默认路径和文件类型?

50

我正在使用 SaveFileDialog.SaveFile。如何将其设置为默认(操作系统)的驱动器字母,并仅限显示扩展名为.BIN的选项?

我尝试阅读MSDN文档,但我对此非常陌生,而且说实话有时我觉得它们不太清楚。


7
你的两个问题都没有意义。 - SLaks
1
我认为第一个问题的意思是:“如何找出操作系统安装在哪个驱动器上?” - user142162
没错,Tim Cooper,那就是我想要说的。 - user636438
可能是获取C#保存对话框的文件路径的重复问题。 - NoWar
我已经编辑了问题文本,试图使其更清晰 - 这是基于原始帖子关于整个问题不同部分的评论。 - StayOnTarget
有一个很好的例子 SaveFileDialog 很清楚地解释了如何使用它。 - 劉鎮瑲
3个回答

107

SaveFileDialog控件实际上不会进行任何保存操作,它只是为你提供了一个方便的界面来显示Windows默认的文件保存对话框。

  1. 将属性InitialDirectory设置为您希望该控件显示的驱动器,考虑到其他可能具有不同布局的计算机。默认情况下,Windows将保存上次使用的目录并再次呈现。

  2. 这是在控件之外处理的。您需要检查对话框的结果,然后自己进行保存(例如编写文本或二进制文件)。

以下是一个快速示例(还有其他可行的方法)。savefile 是一个类型为SaveFileDialog的控件。

SaveFileDialog savefile = new SaveFileDialog(); 
// set a default file name
savefile.FileName = "unknown.txt";
// set filters - this can be done in properties as well
savefile.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";

if (savefile.ShowDialog() == DialogResult.OK)
{
    using (StreamWriter sw = new StreamWriter(savefile.FileName))
        sw.WriteLine ("Hello World!");
}

我理解SaveFileDialog不提供保存二进制文件的功能,我只需要知道如何查找默认驱动器号,并将SaveFileDialog选项限制为仅显示.BIN作为文件扩展名。 - user636438
2
只需替换它。格式非常简单 - 只有几个以下字符串“语法”的部分:“显示文本|过滤器|”。例如,对于您的bin文件,您将编写:“BIN文件|*.bin|”。实际过滤器可以是您使用cmd的dir命令的任何文件掩码。为了限制它,请提供一个过滤器描述,但如果您想要,可以添加更多(最多256个)。 - Mario
由于saveFile在当前上下文中不存在,我该如何定义该变量?我对此非常陌生,所以我找到了这个问题。顺便说一句,很抱歉我要发表一篇旧帖,但我会感激您的帮助。谢谢 :) - puretppc
有人知道Windows存储应用程序最近使用的目录的位置吗? - Kevin Vuilleumier
@KevinVuilleumier,你应该在一个新的问题中询问这样的事情。但是,你应该能够在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSavePidlMRU下找到按文件扩展名拆分的MRU(注意它不是明文)。 - Mario
显示剩余3条评论

5

谢谢,这正是我需要的。但是如何限制筛选器仅显示 .bin 文件呢? - user636438
我不能选择将您的解决方案标记为答案,因为我的积分不够,但非常感谢您和Mario,只有你们理解了我,所以再次感谢 :) - user636438

3
这里有一个实际上过滤BIN文件的例子。 现在,Windows希望你将文件保存到用户位置,而不是系统位置,因此这是一个例子(你可以使用智能感知浏览其他选项):
            var saveFileDialog = new Microsoft.Win32.SaveFileDialog()
            {
                DefaultExt = "*.xml",
                Filter = "BIN Files (*.bin)|*.bin",
                InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
            };

            var result = saveFileDialog.ShowDialog();
            if (result != null && result == true)
            {
                // Save the file here
            }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接