在公司进行项目准备练习的过程中,涉及到了基础操作--读取文件。由于本人很久没弄过C#的文件读取了,因此基本操作存在手生的情况,所以还是针对打开单一文件及文件夹文件的方法进行简单汇总。
首先要明白,读取文件和打开文件是两回事,因为读取文件是读取文件中的每一行数据,这个需要用到文本流的内容(即StreamReader 和 StreamWriter )。如果仅是打开文件和文件夹那么就是要动态获取文件路径,本文总结的就是这种情况。
目录
1.打开单一文件
2.打开文件整个文件目录
3.总结:
简单版本:FileName就是文件地址了
private void btnOpenFile_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { OpenFileDialog dlg = new OpenFileDialog(); if (dlg.ShowDialog() == DialogResult.OK) { //加载文件 objLine=LoadTxtFile(dlg.FileName.ToString()); MessageBox.Show("文件读取成功"); } else { return; } }
进一步改进允许一次选择多个文件,当然你可以用数组存储也可以用集合存储。
/// <summary> /// 打开文件,可选择多个文件 /// </summary> /// <param name="fileExt">输入文件尾缀名,不包含"."</param> /// <returns></returns> public static string[] OpenFiles(string fileExt) { OpenFileDialog dialog = new OpenFileDialog(); dialog.Multiselect = true;//允许打开多个文件 dialog.DefaultExt = fileExt;//打开文件时显示的可选文件类型 dialog.Filter = fileExt + "xlsx文件|" + "*." + fileExt+"|xls文件|*.xls";//打开多个文件 if (dialog.ShowDialog() == DialogResult.OK) return dialog.FileNames; else { MessageBox.Show("返回文件路径失败"); return null; } }
打开整个目录要用到FolderBrowserDialog类,具体使用可以参考微软文档:
FolderBrowserDialog 类 (System.Windows.Forms) | Microsoft Docs
这里只给出简单使用:
private void btnWd_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { //打开选择的文件夹 FolderBrowserDialog objFoldDialog = new FolderBrowserDialog(); if (objFoldDialog.ShowDialog() == DialogResult.OK) { DialogResult obj = MessageBox.Show("当前选择路径\r\n"+ objFoldDialog.SelectedPath, "请选择【纬地数据】文件夹",MessageBoxButtons.YesNo,MessageBoxIcon.Information); if (obj == DialogResult.Yes) { //读取目录的全部文件 getPath(objFoldDialog.SelectedPath); } else { return; } } }
方法getPath: 我定义了一个list集合进行存储:
//定义集合用来存放读取的全部路径
public static List<string> list = new List<string>();
/// <summary> /// 读取某一文件夹下所有的文件及文件夹 /// </summary> /// <param name="path"></param> /// <returns></returns> public void getPath(string path) { DirectoryInfo dir = new DirectoryInfo(path); //返回当前目录的文件列表 FileInfo[] files = dir.GetFiles(); //返回当前目录的子目录 DirectoryInfo[] diis = dir.GetDirectories(); //集合放东西前先清空 list.Clear(); //将所有文件添加到集合中 foreach (FileInfo file in files) { list.Add(file.FullName); } //递归将所有子文件夹内文件放到集合中 foreach (DirectoryInfo dii in diis) { getPath(dii.FullName); } }
注意:由于文件夹中还可能会嵌套文件夹,因此这种工作递归最为适合。
读取文件在桌面级应用中十分常见,因此还是记录下,方便下次寻找,后面会进一步总结以前写过的文件流的读取方式。另外还是希望大佬们有好的建议及时留言。