手机版

net core读取本地指定目录中文件的实例代码

时间:2021-08-30 来源:互联网 编辑:宝哥软件园 浏览:

项目要求

Asp.net核心阅读。日志文件,以及。日志文件如下:

xxx.log

开始。-结束-

开始端是一个组,如果用户id在同一个组中。日志文件也是一样,取写入时间最大的组,需要的结果如下:

UserID Golds RecordDate 1001 20 2018/9/11 17:10336048 1000 20 2018/9/11 17:11336048 1003 30 2018/9/11 17:12:48 1002 10 2018/9/11 183:013333333333333333

项目结构

Asp.net核心2.0网站

项目执行

创建一个新的Snai。文件解决方案,并在该解决方案下的Asp.net核心2.0中创建一个名为snai.file.fileoperation的空网站

将日志文件复制到项目中

修改Startup类的ConfigureServices()方法,注册访问本地文件所需的服务,然后通过中间件中的构造函数注入到中间件中,这样就可以在一个地方(即应用程序启动时)控制文件的访问路径

public void ConfigureServices(IServiceCollection services){ services。添加单个文件提供程序(新的物理文件提供程序(目录。GetCurrentDirectory()));}创建一个新的中间件文件夹,在中间件下创建一个Entity文件夹,并创建一个新的UserGolds.cs类来存储读取的日志内容。代码如下

名称空间Snai。file . file operation . middleware . entity { public class usergds { public usergds(){ RecordDate=new DateTime(1970,01,01);UserID=0;golds=0;}公共DateTime RecordDate { get设置;} public int UserID { get设置;} public int Golds { get设置;}}}在Middleware下新建一个FileProviderMiddleware.cs中间件类,用于读取log下的所有日志文件内容,并排列成需要的内容格式。代码如下

名称空间斯奈.文件。文件操作。中间件{公共类文件提供程序中间件{私有只读请求委托_下一步;private readonly IFileProvider _ file提供程序;公共文件提供程序中间件(请求委托next,IFileProvider文件提供程序){ _ next=next_ fileProvider=fileProvider}公共异步任务调用(HttpContext上下文){ var output=new StringBuilder(" ");//解析目录(输出'',' ');ResolveFileInfo(输出、“日志”等.log’);等待上下文。响应WriteAsync(输出. ToString());} //读取目录下所有文件内容私有void ResolveFileInfo(StringBuilder输出,字符串路径,字符串后缀){输出.附加行('用户标识金色记录日期');目录内容目录=_文件提供程序.GetDirectoryContents(路径);foreach(目录中的IFileInfo项){ if(项IsDirectory) { ResolveFileInfo(输出,项目。物理路径。子字符串(目录GetCurrentDirectory().长度)、后缀);} else { if (item .名字。包含(后缀)){ var用户列表=new listsusergds();var user=new user gals();IFileInfo文件=_文件提供程序.GetFileInfo(路径' \\ '项。名称);使用(var stream=文件.CreateReadStream()){ 0使用(var reader=新的流读取器(stream)){ string content=reader .ReadLine();而(内容!=null) { if (content .包含(“begin”){ user=new user gals();} if (content .包含('写入时间)){ DateTime recordDate字符串strRecordDate=内容。子串(内容的索引(' :') 1 .trim();if (DateTime .TryParse(strRecordDate,out recordDate)) {用户.记录日期=记录日期;} } if (content .包含(“UserID”){ int UserID;字符串strUserID=内容.子串(内容LastIndexOf('=') 1).trim();if (int .TryParse(strUserID,out userID)) { user .用户标识=用户标识} }如果(内容.包含(“golds”){ int golds;字符串strGolds=内容。子串(内容LastIndexOf('=') 1).trim();if (int .tryparles(strGolds,out golds)) { user .金色=金色;} } if (content .包含(“end”){ var UserMax=用户列表.first ordefault(u=u . UserID==user .UserID);if (userMax==null || userMax .用户标识=0) {用户列表。添加(用户);} else if (userMax .记录日期用户。记录日期){用户列表。移除(UserMax);用户列表。添加(用户);} }内容=阅读器ReadLine();} } } if (userList!=空用户列表.计数0) { foreach(用户列表中的var golds .order by(u=u . RecordDate)){ 0输出。附录(金色用户标识。ToString() ' ' golds .金牌记录日期);}输出AppendLine(" ");} } } } } //读取目录下所有文件名私有空解析器目录(字符串生成器输出,字符串路径,字符串前缀){目录内容目录=_文件提供程序.GetDirectoryContents(路径);foreach(目录中的IFileInfo项){ if(项I目录){输出.AppendLine(前缀为"["的项目。名称']');解析目录(输出,项目。物理路径。子字符串(目录GetCurrentDirectory().长度),前缀' ');} else {输出AppendLine(路径前缀项。名称);} } } }公共静态类UseFileProviderExtensions(公共静态IApplicationBuilder usefile提供程序(此IApplicationBuilder应用程序){返回应用程序.UseMiddlewareFileProviderMiddleware();} }}上面有两个方法ResolveFileInfo()和解析目录()

ResolveFileInfo()读取目录下所有文件内容,也就是需求所用的方法

解析目录()读取目录下所有文件名,是输出目录下所有目录和文件名,不是需求所需但也可以用

修改Startup类的Configure()方法,在app管道中使用文件中间件服务

public void Configure(IApplicationBuilder应用程序,IHostingEnvironment env){if (env。IsDevelopment()){app。usedeveloper exception page();}app。usefile provider();app。run(async(context)={ wait context。回应。写异步('你好,世界!');});}到目前为止所有的代码都已经写好了

启动正在运行的项目并获得所需的结果。页面结果如下

源代码访问地址:https://github.com/Liu-Alan/Snai.文件

摘要

以上是的知识。net核心阅读边肖介绍的本地指定目录中的文件,对大家有帮助。如果你有任何问题,请给我留言,边肖会及时回复你的!

版权声明:net core读取本地指定目录中文件的实例代码是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。