在公司进行项目准备练习的过程中,涉及到了基础操作--读取文件。由于本人很久没弄过C#的文件读取了,因此基本操作存在手生的情况,所以还是针对打开单一文件及文件夹文件的方法进行简单汇总。
首先要明白,读取文件和打开文件是两回事,因为读取文件是读取文件中的每一行数据,这个需要用到文本流的内容(即StreamReader 和 StreamWriter )。如果仅是打开文件和文件夹那么就是要动态获取文件路径,本文总结的就是这种情况。
目录
1.打开单一文件
简单版本: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;
}
}
2.打开文件整个文件目录
打开整个目录要用到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);
}
}
注意:由于文件夹中还可能会嵌套文件夹,因此这种工作递归最为适合。
3.总结:
读取文件在桌面级应用中十分常见,因此还是记录下,方便下次寻找,后面会进一步总结以前写过的文件流的读取方式。另外还是希望大佬们有好的建议及时留言。