做 winform 项目的时候正好遇到了记录一下:
打开文件
我们使用 OpenFileDialog
控件来打开文件选择框:
- 通过
Title
属性可以设置选择框的标题 - 而
Filter
属性可以设置选中的文件类型,这个属性由两个部分组成SVG files (*.svg)|*.svg
,前面部分代表选择框中显示给用户的名字,而后面部分系统过滤的文件类型,如果需要设定多种类型,可以通过|
分割这些类型,特殊的*.*
代表全部类型文件:
//创建打开页面
var flgOpenFileDialog = new OpenFileDialog();
//设置标题
flgOpenFileDialog.Title = "请选择文件";
//设置文件的后缀
flgOpenFileDialog.Filter = @"SVG files (*.svg)|*.svg|AI files (*.ai)|*.ai|EPS files (*.eps)|*.eps|DXF files (*.dxf)|*.dxf|All files (*.*)|*.*";
Filter
属性也可以通过多次添加的方式来设置列表:
fileDialog.Filter = "All files (*.*)|*.*";
fileDialog.Filter = "SVG files (*.svg)|*.svg";
当用户选择完毕文件后,我们可以通过 DialogResult.OK
来响应它,通过 FileName
属性可以获取到选择的文件
if (fileDialog.ShowDialog() == DialogResult.OK)
{
// 文件的路径
string file = fileDialog.FileName;
}
如果用户需要选择多个文件,可以通过设置 Multiselect
属性来开启多选,此时 FileName
属性拿到的是第一个文件的路径,而 FileNames
属性可以拿到选择的全部文件,它返回一个数组:
fileDialog.Multiselect = false;
if (fileDialog.ShowDialog() == DialogResult.OK)
{
// 文件的路径
string[] files = fileDialog.FileNames;
}
保存文件
如果用户想要打开一个保存文件的窗口,就需要选用 SaveFileDialog
这个控件来操作,其用法和 OpenFileDialog
一致,通过 Filter
可以设置可以保存的格式,通过 FileName
属性我们可以文件的设置默认的保存名称,这里我们只需要填写名称即可,不需要文件的保存路径,还有一些其他配置写在代码注释中了
SaveFileDialog dialog = new SaveFileDialog();
dialog.Filter = "svg文件(*.svg)|*.svg"; ; //设置文件类型
dialog.FileName = "test.svg";
dialog.DefaultExt = "svg"; //设置默认格式(可以不设)
dialog.AddExtension = true; //设置自动在文件名中添加扩展名
dialog.RestoreDirectory = true;//保存对话框是否记忆上次打开的目录
和打开文件时一样,我们可以通过 DialogResult.OK
来得知用户选择完毕,之后通过 FileName
属性获取文件保存位置的完整路径,之后通过 IO 将数据写入即可。
if (dialog.ShowDialog() == DialogResult.OK)
{
string save_filename = dialog.FileName; //获得文件路径
//举例子,写入一个二进制文件
BinaryWriter bw = new BinaryWriter(File.Create(save_filename));
bw.Write(_newBvk);
bw.Close();
MessageBox.Show("保存成功!");
}
如果你想在用户在选择框取消选择时做一些事情,你可以通过 DialogResult.Cancel
来判定
if( dialog.ShowDialog() == DialogResult.Cancel)
{
// 取消操作
}
属性补全
既然用到了这两个控件,那就顺便学习一下他们的全部属性,方便之后可以更加快捷的使用他们,下面是查阅资料得到的内容:
这两个属性用于定于我们筛选器的内容,也就是这个位置的内容,具体用法在上面已经提过了
dialog.Filter = "SVG files (*.svg)|*.svg"; //文件筛选器
dialog.FilterIndex = 1; //默认显示哪一个文件筛选器
值得一提的是除了之前提到的用法,这样的方式也是可以添加多个筛选器的:
dialog.Filter = "SVG files (*.svg)|*.svg";
dialog.Filter = "All files (*.*)|*.*";
这两个属性和目录相关,前者用于设置第一次打开时的目录,后者用于在我们多次打开时,保留上一次打开的目录状态
dialog.InitialDirector = "E://" //对话框的初始目录
dialog.RestoreDirectory = true;//保存对话框是否记忆上次打开的目录
这三个属性和我们的文件名相关,前者用于设置我们在编写文件名称后,是不是要自动为用户添加拓展名,后者则是设置我们自动生成的拓展名内容,而 filename 则用于我们设置默认保存的文件名称:
dialog.AddExtension = true; //设置自动在文件名中添加扩展名
dialog.DefaultExt = ".svg" //设置默认格式
dialog.FileName = "test.svg"; //默认保存的文件名称
这两个属性用于定义我们的选择框信息,是不是展示帮助按钮,以及左上角的标题:
dialog.ShowHelp = true // 是不是启动帮助按钮
dialog.Title = "save" //左上方的标题
这三个属性是用于校验的,前者两个用于判定用户输入(选择)的路径是不是存在(会导致保存失败),最后一个则用于设置是不是要判定选择的文件和路径是不是含有 windows 下无效的字符(会导致保存失败)
dialog.CheckFileExists = true; //在对话框返回之前,检查指定文件是否存在
dialog.CheckPathExists = true; //在对话框返回之前,检查指定路径是否存在
dialog.ValidateNames = true //控制对话框检查输入的文件名中是否不含有无效的字符或序列
更多更详细的资料可以查看官方文档:
https://learn.microsoft.com/zh-cn/dotnet/desktop/winforms/controls/savefiledialog-component-windows-forms?view=netframeworkdesktop-4.8&redirectedfrom=MSDN