winform读取文件夹的文件

WinForm 读取本地文件的方法

在 WinForm 应用程序中,我们经常需要读取本地文件的内容,本文将介绍几种常用的方法来实现这个功能。

winform读取文件夹的文件

使用 OpenFileDialog 控件

OpenFileDialog 是一个对话框控件,用于让用户选择文件,我们可以使用它来获取用户选择的文件路径,然后根据该路径读取文件内容,以下是如何使用 OpenFileDialog 的示例代码:

using System;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Filter = "文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*";
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                string filePath = openFileDialog.FileName;
                string fileContent = File.ReadAllText(filePath);
                MessageBox.Show("文件内容为:" + fileContent);
            }
        }
    }
}

使用 StreamReader 类

StreamReader 是一个用于读取字符流的类,它可以从文件或字符串中读取文本,我们可以使用它来读取本地文件的内容,以下是如何使用 StreamReader 的示例代码:

winform读取文件夹的文件

using System;
using System.IO;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button2_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Filter = "文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*";
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                string filePath = openFileDialog.FileName;
                using (StreamReader reader = new StreamReader(filePath))
                {
                    string fileContent = reader.ReadToEnd();
                    MessageBox.Show("文件内容为:" + fileContent);
                }
            }
        }
    }
}

使用 FileStream 类和 BinaryReader 类(高级方法)

如果需要对大文件进行高效处理,可以使用 FileStream 类和 BinaryReader 类,这种方法允许我们逐块读取文件内容,而不是一次性将整个文件加载到内存中,以下是如何使用这两种类的示例代码:

using System;
using System.IO;
using System.Windows.Forms;
using System.Runtime.InteropServices; // 需要添加此引用以使用 SetFilePointerEx 函数(仅限 Windows XP/2003)
using System.Drawing; // 需要添加此引用以使用 Image.FromStream 方法(仅限 Windows XP/2003)不建议在此方法中使用此引用,因为它会增加内存消耗并降低性能,但在某些特殊情况下,可能需要使用此方法,请谨慎使用。-->SetLastError(ERROR_SUCCESS);//定义一个错误码变量SetLastError函数是Windows API中的一个函数,用于存储系统最后一次发生的错误的数值信息,在这里定义一个SetLastError函数,并将其返回值设置为ERROR_SUCCESS,表示没有错误发生。-->int size=new FileInfo(filename).Length;//获取文件大小int offset=0;//定义偏移量size=size+offset;//计算实际大小while (offset<size) //循环读取每个字节{byte[] b=new byte[4096];int readSize=0;try {readSize=stream.Read(b,0,b.Length);if (readSize>0) stream.Seek(offset, SeekOrigin.Begin);else break;offset+=readSize;} catch (Exception ex) {MessageBox.Show("读取文件时出错:"+ex.Message);break;}}string str=Encoding.Default.GetString(b);MessageBox.Show("读取到的文件内容为:"+str);//释放资源stream.Close();//关闭流Marshal.ReleaseComObject(stream);//释放COM对象stream=null;//将流对象置空-->private void button3_Click(object sender, EventArgs e)//定义按钮点击事件{OpenFileDialog openFileDialog=new OpenFileDialog();openFileDialog.Filter="文本文件(*.txt)|*.txt|所有文件(*.*)||*";if (openFileDialog.ShowDialog()==DialogResult.OK)//判断是否选择了文件string filename=openFileDialog.FileName;using (System.Diagnostics.Process process=new System.Diagnostics.Process()){process.StartInfo.UseShellExecute=false;process.StartInfo.RedirectStandardOutput=true;process.StartInfo.FileName="C:\\WINDOWS\\system32\type\\"+filename;process.Start();string result="";while (!process.StandardOutput.EndOfStream)//循环读取输出结果result+=process.StandardOutput.ReadLine();MessageBox.Show("读取到的文件内容为:"+result);process.WaitForExit();process.Close();}Marshal.ReleaseComObject(stream);//释放COM对象stream=null;//将流对象置空}-->相关问题与解答:如何判断文件是否存在?答:可以使用 FileInfo 类的 Exists 属性来判断文件是否存在,bool isExist = new FileInfo("filePath").Exists;if (isExist) { MessageBox.Show("文件存在");} else { MessageBox.Show("文件不存在");} 如何关闭打开的文件?答:在使用完 FileStream、BinaryReader、StreamReader 等类后,应调用 Close、Dispose 或 ReleaseComObject 方法来关闭打开的文件,stream.Close(); stream = null; Marshal.ReleaseComObject(stream); 如何避免重复打开同一个文件?答:在使用完 FileStream、BinaryReader、StreamReader 等类后,应调用 Close、Dispose 或 ReleaseComObject 方法来关闭打开的文件,这样可以确保不会重复打开同一个文件。

原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/162959.html

Like (0)
Donate 微信扫一扫 微信扫一扫
K-seo的头像K-seoSEO优化员
Previous 2023-12-24 17:31
Next 2023-12-24 17:32

相关推荐

  • winform 多窗口

    WinForm多窗口应用程序,实现多个独立窗口之间的切换和交互。

    2024-01-26
    0254
  • 什么是System Idle Process

    System Idle Process,通常被简称为“System Idle Process”或“SIP”,是Windows操作系统中的一个非常重要的进程,它的名字可能会让人误解,以为它是系统空闲时运行的进程,但实际上,它的名称来源于早期计算机系统中的一种概念。在早期的计算机系统中,CPU的利用率并不是100%,也就是说,CPU在执行……

    2024-01-06
    0265
  • 解决JDBC的class.forName问题

    解决JDBC的class.forName()问题在Java中,我们经常使用JDBC(Java Database Connectivity)来连接和操作数据库,在使用JDBC时,我们通常会使用Class.forName()方法来加载数据库驱动,有时候我们可能会遇到一些问题,比如找不到驱动类、驱动类加载失败等,本文将介绍如何解决这些问题。……

    2024-03-09
    0195
  • winform数据库增删改查怎么实现

    string sql = "INSERT INTO YourTable VALUES ";下面以一个简单的图书管理系统为例,演示如何在WinForm应用程序中实现对图书信息的增删改查操作,1、首先创建一个图书类,用于存储图书信息,int rowsAffected = UpdateBook; // 根据传入的id和currentId执行更新操作,返回受影响的行数

    2024-01-25
    0252
  • java中currenttimemillis

    Java的currentTimeMillis方法简介currentTimeMillis()是Java中的一个方法,用于获取当前时间与1970年1月1日0时0分0秒(UTC)之间的毫秒数差,这个方法属于java.lang.System类,因此在使用前需要先导入该类。currentTimeMillis()方法返回的是一个长整型(long)……

    2024-01-17
    0213
  • java的输出语句怎么写?

    Java输出语句使用System.out.println()方法,将需要输出的内容放在括号内即可。

    2023-12-29
    0127

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入