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 的示例代码:
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