c#中的IO流(文件操作)

获取磁盘信息DriveInfo
foreach (var div in DriveInfo.GetDrives())
{
    Console.WriteLine(div + "容量:"+ div.TotalSize);//获取到盘符
}

获取文件信息Environment

Console.WriteLine(Environment.CurrentDirectory);//获取当前目录

路径管理Path

string path = Path.Combine(Environment.CurrentDirectory, "net");//路径拼接,往后加一级文件夹,可以两个可以多个方法重载的。
Console.WriteLine(path);

目录管理:Dictionary文件夹创建删除移动等操作,DirectoryInfo获取文件夹信息

DirectoryInfo dinfo = Directory.CreateDirectory(path);//创建文件夹
Console.WriteLine(dinfo.Name);//获取文件夹名称,GetCreationTime创建时间,GetLastWriteTime最后一次修改时间。

文件管理:File文件删除移动创建等操作,FileInfo获取文件信息

string filePath = path + "\\books.txt";//记录文件路径
FileStream f = File.Create(filePath);//创建文件(也会覆盖原文件),把路径给方法Create创建;另外:Delete删除,Copy复制。Exists判断文件是否存在。
f.Close();//因为Create是FileStream文件操作流对象,在操作流开启那么需要关闭后面的才能继续使用。否则进程无法释放。
FileInfo fi = new FileInfo(filePath);
Console.WriteLine(fi.CreationTime);//获取文件创建时间;另外:FullName完整路径,Name文件名。
FileStream fs = new FileStream(url, FileMode.Append); //文件存在就打开,不存在就创建,这种创建需要io流引入库,了解就好(参数1:路径,参数2:打开方式,参数3:读写权限)

文件操作:Stream派生出FileStream他在派生出StreamReader读取文件流和StreamWriter写入文件流,另外二进制文件的读写BinaryReader和BinaryWriter和文本文件用法一样。

StreamWriter sw = new StreamWriter(filePath,true);//写入,构造方法重载,第二个参数是文件追加写入,不覆盖
try
{
    sw.WriteLine("写入一句话。");
}
catch (IOException ex)//IO流异常
{
    throw ex;//返回异常
}
finally 
{
    sw.Close();//关闭写入流
}
StreamReader sr = new StreamReader(filePath);//读取
string str;
while((str = sr.ReadLine()) !=null) Console.WriteLine(str);//从头到尾都读取ReadToEnd,这里是循环读取每一行

StreamWriter流是非托管类型,net管不了,操作系统管理,需要手动关闭释放,否则一直占用进程资源。
using关键字大括号运行技术后可以自动释放。是官方给的,结合try--catch手动关闭的方式写的关键字,以后就不需要每次去手动关闭了。

using (StreamWriter sw = new StreamWriter(filePath, true))//using关键字:作用于对象在大概运行结束后自动close,自动释放资源。
{
    sw.WriteLine("写入一句话。");//节省了try-catch的代码
}

 打开桌面的某个软件用

System.Diagnostics.Process.Start(@"C:\Users\Administrator\AppData\Local\google\Chrome\Application\chrome.exe");

 C#使用MiniExcel操作Excel更快更高效(替代NPOI)

Excel的导出与导入

装备测试数据创建Excel表格后缀名必须是.xlsx文件

创建实体类用于数据传输,属性名和表格第一列必须一样

public class userInfo
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Title { get; set; } 
}

(导入)查询:使用前必须Nuget下载安装Miniexcel包。

using MiniExcelLibs;//操作Excel表格的命名空间

string path = @"E:\xx.xlsx";

var rows = MiniExcel.Query<userInfo>(path).ToList();//Query 查询 Excel 返回 IEnumerable 数据,能配合LINQ First/Take/Skip办到低消耗、高效率复杂查询
foreach (var row in rows) Console.WriteLine($"{row.Id}:{row.Name}:{row.Title}" );

(导出)写入数据,并另存为.xlsx文件。也就是生成一个Excel文件。

using MiniExcelLibs;//操作Excel表格的命名空间

string path = @"E:\xx.xlsx";

var rows = MiniExcel.Query<userInfo>(path).ToList();//这里改为List<userInfo>()或者数据库,数据源等等。

userInfo u = new userInfo();
u.Id = 22;
u.Name = "张三";
u.Title = "c#编程";
rows.Add(u);//向表格里添加数据

MiniExcel.SaveAs(@"E:\数据全部导出.xlsx", rows);//保存,另存为,注意文件存在会报错。可以用来创建新文件,赋值,空null

重写标题导出

MiniExcel.SaveAs(@"E:\数据全部导出.xlsx", GetExcelList(rows),true,"学生信息表");//文件另存为,文件存在会报错

IEnumerable<Dictionary<string, object>> GetExcelList(List<userInfo> test)//定义个重写标题的方法
{
    foreach (var item in test)
    {
        var newCompanyPrepareds = new Dictionary<string, object>();
        newCompanyPrepareds.Add("Id", item.Id);
        newCompanyPrepareds.Add("姓名", item.Name);
        newCompanyPrepareds.Add("职位", item.Title);
        yield return newCompanyPrepareds;
    }
}

 避免保存时报错可以加上这个判断:文件存在就删除文件

if (System.IO.File.Exists(@"E:\数据全部导出.xlsx"))
{
    System.IO.File.Delete(@"E:\数据全部导出.xlsx");
}

 



posted @ 2022-11-01 02:55  Akai_啊凯  阅读(505)  评论(0编辑  收藏  举报