【32】C# WinForm入门到精通 ——打开文件OpenFileDialog 【属性、方法、事件、实例、源码】

发布于:2025-07-31 ⋅ 阅读:(22) ⋅ 点赞:(0)
  • WinForm 是 Windows Form 的简称,是基于 .NET Framework 平台的客户端(PC软件)开发技术,是 C# 语言中的一个重要应用。

  • .NET 提供了大量 Windows 风格的控件和事件,可以直接拿来使用。

  • 本专栏内容按照标题序号逐渐深入的,如有不懂的基础问题,可看前面教程

  • 在介绍属性的时候,会展示一些用法、代码、实例、截图这样看起来更清晰,免得直接看最后综合实例会有些懵

1 打开文件OpenFileDialog——属性

文件对话框(FileDialog)主要包括文件浏览对话框,以及用于查找、打开、保存文件的功能,与 Windows 中的文件对话框类似。

  • OpenFileDialog用于我们需要弹出一个选择文件的对话框的场合,然后用户在这个对话框中选择文件,可以获取这个文
    件的路径,对文件进行打开操作。

在这里插入图片描述

1.1 AddExtension

该属性用于SaveFileDialog保存文件时,如果没有为文件添加后缀,则自动为保存的文件添加一个后缀,这个后缀是由DefaultExt属性决定的,比如DefaultExt的,所以在OpenFileDialog中这个属性没什么作用,在SaveFileDialog中我再详细介绍该属性

1.2 AutoUpgradeEnabled

该值指示此 FileDialog 实例在 Windows Vista 上运行时是否应自动升级外观和行为,一般情况下用不到该属性

1.3 CheckFileExists

该属性指示用打开文件时,当选择的文件根本不存在时,然后我们点击“打开”按钮时,弹窗提示用户,效果如下
在这里插入图片描述
所以这个属性一般都要设置为true,这样可以防止用户打开的文件有问题

1.4 CheckPathExists

该属性指示用打开文件时,当选择的路劲根本不存在时,然后我们点击"打开”按钮时,弹窗提示用户,效果如下
在这里插入图片描述
在这里插入图片描述
所以这个属性一般都要设置为true,这样可以防止用户打开的路径有问题

1.5 DefaultExt

该属性主要是结合SaveFileDialog控件使用,对于OpenFileDialog暂时不考虑

1.6 DereferenceLinks

该属性为true时,用于指示当打开文件时,我们输入快捷方式文件 (.ink)就能打开快捷方式指定的真实路径,

如下图这是串口助手XCOM V2.0.exe的快捷方式,是放到桌面的,文件名为.ink,如下图:

在这里插入图片描述

在这里插入图片描述

当点击“打开”按钮以后,就能看到快捷方式指向的真实路径,如下图
在这里插入图片描述

1.7 FileName

该属性用于获取我们在打开“OpenFileDialog中”输入的文件名 (单个文件),如下:
在这里插入图片描述
打开代码如下
是当我们点击按钮以后,弹出一个打开文件对话框,我们选择一个文件,就能获取到选择的文件的全路径

  private void button1_Click(object sender, EventArgs e)
  {
      openFileDialog1.CheckFileExists  = false ;
      openFileDialog1.CheckPathExists = true;
      if (openFileDialog1.ShowDialog() == DialogResult.OK)
      {
          string fileName = openFileDialog1.FileName;
      }
  }

1.8 FileNames

当Multiselect为true时,这时候我们可以选择多个文件,这时我们可以通过FileNames来获取多个文件的路径

1.9 Filter

该属性用于指定打开什么类型的文件,一般有下面几种用法

1.9.1 打开某一类文件

下面的代码中有一条“|”,这“|”的左边“xt文件”用于对”|”右边的描述,“*.txt"用于指示只能打开.txt类型的文件,代码如下:

   openFileDialog1.Filter = "txt文件|*.txt";

在这里插入图片描述

Filter:文件格式筛选器,如图片格式删选JPEG Files (*.jpg)|*.jpg|PNG Files (*.png)|*.png|BMP Files (*.bmp)|*.bmp|All files (*.*)|*.*;

1.9.2 打开多种类型的文件

代码如下:

  openFileDialog1.Filter = "csv文件|*.csv|txt文件|*.txt";

上述代码的作用是指定打开csv文件或者txt文件,如下图
在这里插入图片描述

上图被红色框标记的部分是一个下拉框,

  • 当你选择CS文件发现只能选择CSV文件,
  • 当你选择txt文件的时候,只能选择txt文件,如下图:
    在这里插入图片描述

当你选择txt文件的时候,只显示txt文件
在这里插入图片描述

1.9.3 打开所有类型的文件

代码如下:

 openFileDialog1.Filter = "所有文件|*.*";

1.10 FilterIndex

该属性用于指定在有多个类型的文件时,指定OpenFileDialog对话框打开以后,显示的是哪个类型的文件,比如下面的代码中,一共指定了Csv文件、txt文件,并且CSv文件对应的Filterlindex 就是1,txt文件对应的Filterindex 就是2,原则就是从左到右数,Filterindex 的值以1、2、3、依次加1。

//打开文件
private void button2_Click(object sender, EventArgs e)
{
    openFileDialog1.CheckFileExists = true;
    openFileDialog1.CheckPathExists = true;

    //打开指定类型文件
    openFileDialog1.Filter = "csv文件|*.csv|txt文件|*.txt";
    openFileDialog1.FilterIndex = 2;//索引从1开始,所以这里从左到右csv文件对应的FilterIndex是1,txt文件对应的FilterIndex是2


    DialogResult dr = openFileDialog1.ShowDialog();
    //获取所打开文件的文件名
    string filename = openFileDialog1.FileName;
    if (dr == DialogResult.OK && !string.IsNullOrEmpty(filename))
    {
        StreamReader sr = new StreamReader(filename); // StreamReader()定义在System.IO中,添加命名空间using System.IO;
        textBox1.Text = sr.ReadToEnd();//将文本内容读取显示到textBox1 
        sr.Close();
    }
}

当为Filterlndex = 2时,效果如下图:
默认就是打开txt类型的文件

在这里插入图片描述

1.11 InitialDirectory

指定打开对话框时,初始化要打开的目录,代码如下

//打开文件
private void button2_Click(object sender, EventArgs e)
{
    openFileDialog1.CheckFileExists = true;
    openFileDialog1.CheckPathExists = true;
    openFileDialog1.InitialDirectory = @"E:\Programming_test";//设置指定保存路径

    //打开指定类型文件
    openFileDialog1.Filter = "csv文件|*.csv|txt文件|*.txt";
    openFileDialog1.FilterIndex = 2;//索引从1开始,所以这里从左到右csv文件对应的FilterIndex是1,txt文件对应的FilterIndex是2


    DialogResult dr = openFileDialog1.ShowDialog();
    //获取所打开文件的文件名
    string filename = openFileDialog1.FileName;
    if (dr == DialogResult.OK && !string.IsNullOrEmpty(filename))
    {
        StreamReader sr = new StreamReader(filename); // StreamReader()定义在System.IO中,添加命名空间using System.IO;
        textBox1.Text = sr.ReadToEnd();//将文本内容读取显示到textBox1 
        sr.Close();
    }
}

触发后直接打开指定路径E:\Programming_test

1.12 Multiselect

该属性用于指示打开文件对话框中是否允许选择多个文件,当该属性为true时如下:

  private void button3_Click(object sender, EventArgs e)
  {
      DialogResult dr = openFileDialog1.ShowDialog();
      //获取所打开文件的文件名

      if (dr == DialogResult.OK)
      {
          string[] filename = openFileDialog1.FileNames;
      }           
  }

在这里插入图片描述

从上图中可以看出,当多选时,然后使用OpenFileDialog的FileNames属性获取多个选择的文件的路径
在这里插入图片描述

1.13 ShowReadOnly

当该属性为true时,将会在对话框中显示一个复选框,如下图
在这里插入图片描述

1.14 ReadOnlyChecked

该属性生效的前提是ShowReadOny属性值为true,当ReadOnyChecked为true时,并且ShowReadOnly为true时,如下图:
在这里插入图片描述

该属性我们可以在代码中获取到以后,然后对文件进行不同的处理,如果该属性为true则不对文件进行写入操作,如果该属性为false则可以对文件进行写入操作

private void button3_Click(object sender, EventArgs e)
{
    openFileDialog1.ReadOnlyChecked = true;
    openFileDialog1.Multiselect = true;
    openFileDialog1.InitialDirectory = @"E:\Programming_test";//指定初始化时打开d盘下的图片文件夹
    openFileDialog1.CheckFileExists = true;
    openFileDialog1.CheckPathExists = true;
    openFileDialog1.FilterIndex = 2;//索引从1开始,所以这里从左到右csv文件对应的FilterIndex是1,txt文件对应的FilterIndex是2
    openFileDialog1.Filter = "所有文件|*.*";


    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {

        if (openFileDialog1.ReadOnlyChecked)//如果检测到只读文件,那么我们就可以不对文件进行写入操作
        {

        }
        else
        {
            string path = openFileDialog1.FileName;
            using (FileStream fs = new FileStream(path, System.IO.FileMode.Open,
                            System.IO.FileAccess.ReadWrite))

            {
                string str = "我是工程师";
                byte[] bytes = Encoding.UTF8.GetBytes(str);
                fs.Write(bytes, 0, bytes.Length);

            }
        }
    }
}

1.15 ShowHelp

该属性设置为true时,下图中会出现一个“帮助”按钮
在这里插入图片描述
如果给OpenFileDialog注册一个HelpRequest事件,代码如下: 当我们点击“帮助”按钮时,会弹出下面的窗体,如下图:

属性->事件(闪电标志)->双击HelpRequest,就可以添加HelpRequest事件
在这里插入图片描述
HelpRequest事件函数中 添加代码

private void openFileDialog1_HelpRequest(object sender, EventArgs e)
{
    MessageBox.Show("我是帮助按钮,你可以给我定义更多帮助内容哟!");
}

在这里插入图片描述

1.16 Tag

绑定数据

1.17 Title

该属性用于设置打开对话框的标题,代码如下

openFileDialog2.Title = "打开文件对话框";

在这里插入图片描述

2 事件

2.1 FileOk

用户点击“打开”或者“保存”时发生

2.2 HelpRequest

用户点击“帮助”按钮时发生

3 实例:打开/保存文件

  • 保存按钮:将文本框内容保存到.txt文件里;
  • 打开按钮:将.txt文件内容显示到文本框里;

Filter:文件格式筛选器,如图片格式删选JPEG Files (*.jpg)|*.jpg|PNG Files (*.png)|*.png|BMP Files (*.bmp)|*.bmp|All files (*.*)|*.*;

在这里插入图片描述

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WinFormTest2
{
    public partial class Form5 : Form
    {
        public Form5()
        {
            InitializeComponent();
        }

        //保存文件
        private void button1_Click(object sender, EventArgs e)
        {
            saveFileDialog1.ValidateNames = true;
            saveFileDialog1.CreatePrompt = true;
            saveFileDialog1.InitialDirectory = @"E:\Programming_test";//设置指定保存路径

            //文件后缀名
            saveFileDialog1.DefaultExt = "txt";
            saveFileDialog1.Filter = "csv文件|*.csv|txt文件|*.txt";
            saveFileDialog1.FilterIndex = 2; //索引从1开始,所以这里从左到右csv文件对应的FilterIndex是1,txt文件对应的FilterIndex是2

            DialogResult dr = saveFileDialog1.ShowDialog();
            //获取所打开文件的文件名
            string filename = saveFileDialog1.FileName;

            if (dr == DialogResult.OK && !string.IsNullOrEmpty(filename))
            {
                StreamWriter sw = new StreamWriter(filename, true, Encoding.UTF8); // StreamWriter()定义在System.IO中
                sw.Write(textBox1.Text);//将textBox1 文本内容写到文件里
                sw.Close();
            }
        }

        //打开文件
        private void button2_Click(object sender, EventArgs e)
        {
            openFileDialog1.CheckFileExists = true;
            openFileDialog1.CheckPathExists = true;
            openFileDialog1.InitialDirectory = @"E:\Programming_test";//设置指定保存路径

            //打开指定类型文件
            openFileDialog1.Filter = "csv文件|*.csv|txt文件|*.txt";
            openFileDialog1.FilterIndex = 2;//索引从1开始,所以这里从左到右csv文件对应的FilterIndex是1,txt文件对应的FilterIndex是2


            DialogResult dr = openFileDialog1.ShowDialog();
            //获取所打开文件的文件名
            string filename = openFileDialog1.FileName;
            if (dr == DialogResult.OK && !string.IsNullOrEmpty(filename))
            {
                StreamReader sr = new StreamReader(filename); // StreamReader()定义在System.IO中,添加命名空间using System.IO;
                textBox1.Text = sr.ReadToEnd();//将文本内容读取显示到textBox1 
                sr.Close();
            }
        }


        private void button3_Click(object sender, EventArgs e)
        {
            openFileDialog1.ReadOnlyChecked = true;
            openFileDialog1.Multiselect = true;
            openFileDialog1.InitialDirectory = @"E:\Programming_test";//指定初始化时打开d盘下的图片文件夹
            openFileDialog1.CheckFileExists = true;
            openFileDialog1.CheckPathExists = true;
            openFileDialog1.FilterIndex = 2;//索引从1开始,所以这里从左到右csv文件对应的FilterIndex是1,txt文件对应的FilterIndex是2
            openFileDialog1.Filter = "所有文件|*.*";


            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {

                if (openFileDialog1.ReadOnlyChecked)//如果检测到只读文件,那么我们就可以不对文件进行写入操作
                {

                }
                else
                {
                    string path = openFileDialog1.FileName;
                    using (FileStream fs = new FileStream(path, System.IO.FileMode.Open,
                                    System.IO.FileAccess.ReadWrite))

                    {
                        string str = "我是工程师";
                        byte[] bytes = Encoding.UTF8.GetBytes(str);
                        fs.Write(bytes, 0, bytes.Length);

                    }
                }
            }
        }

        private void openFileDialog1_HelpRequest(object sender, EventArgs e)
        {
            MessageBox.Show("我是帮助按钮,你可以给我定义更多帮助内容哟!");
        }
    }
}

点击打开文件按钮,选择123.txt文件,将里面的内容显示到 textBox文本框里
在这里插入图片描述
也可以在textBox文本框里输入内容,点击 保存按钮将文本框内容保存到.txt文件里;


网站公告

今日签到

点亮在社区的每一天
去签到