小编给大家分享一下。net核心怎么读取本地指定目录下的文件,希望大家阅读完这篇文章之后都有所收获、下面让我们一起去探讨吧!
<强>项目需求强>
asp.net核心读取日志目录下的. log文件,. log文件的内容如下:
xxx。日志
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -开始- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
写入时间:2018-09-11 17:01:48
,用户id=1000
,金牌=10
, - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -端- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
一个开始结束为一组,同一个。日志文件里userid相同的,取写入时间最大一组值,所需结果如下:
UserID ,Golds ,RecordDate
引用>
, 1001,,,,20,,,,2018/9/11 17:10:48
, 1000,,,,20,,,,2018/9/11 17:11:48
, 1003,,,,30,,,,2018/9/11 17:12:48
, 1002,,,,10个,,,,2018/9/11 18:01:48
, 1001,,,,20,,,,2018/9/12 17:10:48
, 1000,,,,30,,,,2018/9/12 17:12:48
, 1002,,,,10个,,,,2018/9/12 18:01:48<强>项目结构强>
<强> 强>
Snai.File.FileOperation 2.0 Asp.net核心网站
<强>项目实现强>
新建Snai.File解决方案,在解决方案下新建一个名Snai.File。FileOperation Asp.net核心2.0空网站
把日志日志文件拷备到项目下
修改启动类的ConfigureServices()方法,注册访问本地文件所需的服务,到时在中间件中通过构造函数注入添加到中间件,这样就可以在一个地方控制文件的访问路径(也就是应用程序启动的时候)
public void ConfigureServices (IServiceCollection 服务) { services.AddSingleton(new PhysicalFileProvider (Directory.GetCurrentDirectory ())); } 新建中间件文件夹,在中间件下新建实体文件夹,新建UserGolds。cs类,用来保存读取的日志内容,代码如下
namespace Snai.File.FileOperation.Middleware.Entity { public class UserGolds ,{ public 才能;UserGolds () {才能 ,,RecordDate =, new DateTime(1970年,1日,01); ,,UserID =, 0; ,,Golds =, 0; ,,} public 才能DateTime RecordDate {组,得到,,,} public 才能int UserID {组,得到,,,} public 才能int Golds {组,得到,,,} ,} },在中间件下新建FileProviderMiddleware。cs中间件类,用于读取日志下所有日志文件内容,并整理成所需的内容格式,代码如下
namespace Snai.File.FileOperation.Middleware { public class FileProviderMiddleware ,{ private 才能readonly RequestDelegate  _next; private 才能readonly IFileProvider  _fileProvider; public 才能FileProviderMiddleware (RequestDelegate 接下来,,IFileProvider fileProvider) {才能 ,,_next =,下一个; ,,_fileProvider =, fileProvider; ,,} public 才能;async  Task 调用(HttpContext 上下文) {才能 ,,var output =, new StringBuilder (“;”); ,,//ResolveDirectory(输出,,,,,,,,); ,,ResolveFileInfo(输出,“log",,“.log"); ,,await context.Response.WriteAsync (output.ToString ()); ,,}//读才能取目录下所有文件内容 private 才能;void  ResolveFileInfo (StringBuilder 输出,string 路径,string 后缀) {才能 ,,output.AppendLine (“UserID Golds RecordDate"); ,,IDirectoryContents dir =, _fileProvider.GetDirectoryContents(路径); ,,foreach (IFileInfo item  dir)拷贝 ,,{ ,,,if (item.IsDirectory) ,,,{ ,,,,ResolveFileInfo(输出, ,,,,,item.PhysicalPath.Substring (Directory.GetCurrentDirectory () . length), ,,,,,后缀); ,,,} ,,, ,,,{ ,,,,if (item.Name.Contains(后缀)) ,,,,{ ,,,,,var userList =, new List(); ,,,,,var user =, new UserGolds (); ,,,,,IFileInfo file =, _fileProvider.GetFileInfo(时间+ path “\ \”, +, item.Name); ,,,,,using (var stream =, file.CreateReadStream ()) ,,,,,{ null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null net核心怎么读取本地指定目录下的文件