ASP .网络核心2.0本地文件操作问题及解决方案
问题
如何在ASP .网络核心2.0中受限地访问本地目录和文件信息?
答案
新建一个空项目,修改启动类,添加访问本地文件所需的服务:
public void ConfigureServices(IServiceCollection services){ services .添加单个文件提供程序(新的物理文件提供程序(目录. GetCurrentDirectory()));}创建一个中间件,读取根目录下的所有文件,输出文件名:
公共类HelloFileProviderMiddleware { private readonly request delegate _ next;private readonly IFileProvider _ file提供程序;public HelloFileProviderMiddleware(请求委托next,IFileProvider文件提供程序){ _ next=next_ fileProvider=fileProvider}公共异步任务调用(HttpContext上下文){ var output=new StringBuilder(" ");目录内容目录=_文件提供程序.GetDirectoryContents(" ");foreach(目录中的IFileInfo项){输出.附录行(项目。名称);}等待上下文。响应WriteAsync(输出. ToString());} }公共静态类usehellofileprovideredextensions {公共静态IApplicationBuilder UseHelloFileProvider(此IApplicationBuilder应用程序){返回应用程序.usemiddlewareholeofileprovidermiddleware();}}运行,此时页面效果:
当然,我们也可以通过IFileProvider接口读取单个文件信息:
公共类HelloFileProviderMiddleware { private readonly request delegate _ next;private readonly IFileProvider _ file提供程序;public HelloFileProviderMiddleware(请求委托next,IFileProvider文件提供程序){ _ next=next_ fileProvider=fileProvider}公共异步任务调用(HttpContext上下文){ IFileInfo file=_fileProvider .GetFileInfo('启动。cs’);使用(var stream=文件.CreateReadStream()){ 0使用(var reader=新的流读取器(stream)){ var output=等待读取器.ReadToEndAsync();等待上下文。响应WriteAsync(输出. ToString());} } }}运行,此时页面效果:
讨论
ASP .网络核心2.0提供了继承自接口IFileProvider的物理文件提供程序类型,用于受限地访问本地文件系统,它是对系统。输入输出文件的一个封装。
我们可以在启动的配置()方法内将IFileProvider配置为一个服务,然后通过构造函数注入添加到中间件或者控制器中。这样可以在一个地方控制文件的访问路径(也就是应用程序启动的时候)。
IFileProvider有两个重要的方法:
1.GetDirectoryContents:返回目录内容接口。可用于遍历某个目录中的全部文件或目录。
2.GetFileInfo:返回IFileInfo接口。通过其CreateReadSteam方法可以读取文件内容。
====由石三开始===================================
下面通过递归来遍历根目录下全部文件和目录,修改中间件代码:
公共类HelloFileProviderMiddleware { private readonly request delegate _ next;private readonly IFileProvider _ file提供程序;public HelloFileProviderMiddleware(请求委托next,IFileProvider文件提供程序){ _ next=next_ fileProvider=fileProvider}公共异步任务调用(HttpContext上下文){ var output=new StringBuilder(" ");解析目录(输出'',' ');等待上下文。响应WriteAsync(输出. ToString());}私有void ResolveDirectory(StringBuilder输出,字符串路径,字符串前缀){目录内容目录=_文件提供程序.GetDirectoryContents(路径);foreach(目录中的IFileInfo项){ if(项I目录){输出.AppendLine(前缀为"["的项目。名称']');解析目录(输出,项目。物理路径。子字符串(目录GetCurrentDirectory().长度),前缀' ');} else {输出AppendLine(前缀项。名称);} } }} 运行,此时页面效果:
====由石三结束===================================
源代码下载
总结
以上是边肖介绍的ASP.NET Core 2.0本地文件的操作问题及解决方法,希望对大家有所帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!
版权声明:ASP .网络核心2.0本地文件操作问题及解决方案是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。