C# WinForm 选择打开文件和保存文件

news2024/12/30 2:44:44

做 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/701867.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

九、云尚办公系统-管理端-审批管理

云尚办公系统:管理端-审批管理 B站直达【为尚硅谷点赞】: https://www.bilibili.com/video/BV1Ya411S7aT 本博文以课程相关为主发布,并且融入了自己的一些看法以及对学习过程中遇见的问题给出相关的解决方法。一起学习一起进步!!…

Unity导出到AS中真机测试apk没有问题,aab提交到GooglePlay审核通过,但是从Google Play下载的应用闪退问题

从Google Play下载的应用报错如下: backtrace: #00 pc 0x0000000000050748 /data/app/~~x94h_Fmdoj4Vj1NVQcL7sQ/com.id.hhhuhi-LpC7BJqILn3X29R8TffhuA/split_config.arm64_v8a.apk!libpairipcore.so (ExecuteProgram196) 06-26 20:39:40.526 13936 13936 F l…

基于Java+Vue前后端分离宠物领养系统设计实现(源码+lw+部署文档+讲解等)

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

ML@集成学习@摘要

文章目录 集成学习refs摘要Note准确性和多样性 集成学习方法分类BoostingAdaBoost伪代码Adaboost小结 补充补充1补充2 BaggingBagging伪代码 特点算法效率直接应用于多分类 自助采样和包外估计随机森林 Stackingsklearn中的Stacking🎈构造初级学习器构造次级学习器 …

Ubuntu18.04 系统设置修改物理内存-迅为RK3568开发板

打开虚拟机,如下图。单击红色框中的“虚拟机”。如下图所示: 然后点击“设置”弹出虚拟机的设置界面,如下图所示: 更多教程B站搜:迅为3568开发板

RHEL8.2安装QEMU及KVM虚拟化

一、环境 操作系统:CentOS8.2CPU:4C内存:16G磁盘:250G,其中180G分配给/data,用于存储数据及kvm存储池。 二、安装步骤 dnf module install virt dnf install virt-install virt-viewer virt-manager -y三…

【Redis二】Redis优化之持久化

Redis优化之持久化 1.Redis高可用2.Redis持久化2.1 RDB 持久化2.1.1 触发条件2.1.2 执行流程2.1.3 启动时加载 2.2 AOF 持久化2.2.1 开启AOF2.2.2 执行流程2.2.3 文件重写触发方式2.2.4 文件重写的流程2.2.5 启动时加载 2.3 RDB和AOF的优缺点2.4 RDB AOF持久化的区别 3.Redis性…

如何理解 Istio Ingress, 它与 API Gateway 有什么区别?东西流量?南北流量?

文章目录 背景k8s的内部服务如何被外部访问东西流量南北流量流量管理的比较 IngressAPI GatewayIstio参考 背景 这三者都和流量治理密切相关,那么流量治理在过去和现在有什么区别呢?都是如何做的呢? 在学习istio的时候对流量管理加深了理解。…

学编程c++有什么好处?有什么作用?

C是一种跨平台、高效且广泛应用的编程语言,具有许多优势和应用领域。本文将深入探讨学习C编程的好处,包括跨平台性、高效性、对系统资源的控制能力以及面向对象编程的优势。此外,我们还将介绍C在不同领域的应用,如桌面应用程序、嵌…

记录好项目D17

记录好项目 你好呀,这里是我专门记录一下从某些地方收集起来的项目,对项目修改,进行添砖加瓦,变成自己的闪亮项目。修修补补也可以成为毕设哦 本次的项目是个SpringBoot网上商城 一、系统介绍 前台功能 商品分类查询&#xff…

【微服务架构】微服务安全 - 如何保护您的微服务基础架构?

在当今行业使用各种软件架构和应用程序的市场中,几乎不可能感觉到您的数据是完全安全的。因此,在使用微服务架构构建应用程序时,安全问题变得更加重要,因为各个服务相互之间以及客户端之间进行通信。因此,在这篇关于微…

STM32F407实现NEC协议红外线解码

【1】NEC红外线协议介绍 NEC红外线协议是一种常用的红外线通信协议,广泛应用于消费电子产品中,如电视、DVD播放器、空调遥控器等。该协议定义了红外线通信的物理层和数据链路层规范,以实现可靠的红外线数据传输。 下面是NEC红外线协议的详细…

Linux下用who命令查看当前登录用户

文章目录 1 查看当前登录用户(w 和 who)2 who命令查看某一时刻登录的用户3 查看当前登录用户的账户名(whoami)4 关于linux下who指令的总结介绍 1 查看当前登录用户(w 和 who) w命令可以查看某一时刻登录该…

《深入浅出SSD:固态存储核心技术、原理与实战》----学习记录(二)

第2章 SSD主控和全闪存阵列 SSD主要由两大模块构成——主控和闪存介质。其实除了上述两大模块外,可选的还有缓存单元。主控是SSD的大脑,承担着指挥、运算和协调的作用,具体表现在:一是实现标准主机接口与主机通信;二…

短视频seo矩阵+抖音小程序SaaS源码开发部署

短视频seo矩阵开发者综述 短视频seo主要基于抖音短视频平台,为企业实现多账号管理,视频分发,视频批量剪辑,抖音小程序搭建,企业私域转化等,本文主要介绍短视频矩阵系统抖音小程序开发详细及注意事项 抖音小…

VC++6.0实现MFC单文档模拟交通灯

要求: 模拟交通灯: (1)建立一个单文档应用项目(项目名称为学生姓名拼音首字母缩写)。 (2)修改它的图标和版本信息。 (3)为该应用项目添加两个按钮到工具…

uniapp如何使用canvas绘制海报,自适应屏幕尺寸,并且下载本地?

组件目录 /share-canvas.vue <template><u-popup :show"visiable" closeable close"hiddenCanvas" zIndex"999999"><view class"shareModel" touchstart"" touchmove"" touchend"">…

【机器学习】主成分分析实现案例 (PCA)

一、说明 这篇文章的目的是提供主成分分析&#xff08;PCA&#xff09;的完整和简化的解释。我们将逐步介绍它是如何工作的&#xff0c;这样每个人都可以理解并使用它&#xff0c;即使是那些没有强大数学背景的人。 PCA是网络上广泛覆盖的机器学习方法&#xff0c;并且有一些关…

CentOS7下载并安装mysql-8.0.33

CentOS7下载并安装mysql-8.0.33 一、官网下载mysql-8.0.33 MySQL下载路径 MySQL :: Download MySQL Community Server 自己百度mysql官网下载的话直接按照完整路径指示下载即可&#xff0c;如果点击上面的连接下载mysql的话&#xff0c;直接按照4、5、6步骤选择适合自己linu…

Vue--》Vue3打造可扩展的项目管理系统后台的完整指南(八)

今天开始使用 vue3 ts 搭建一个项目管理的后台&#xff0c;因为文章会将项目的每一个地方代码的书写都会讲解到&#xff0c;所以本项目会分成好几篇文章进行讲解&#xff0c;我会在最后一篇文章中会将项目代码开源到我的GithHub上&#xff0c;大家可以自行去进行下载运行&…