当前位置: 首页 > news >正文

大作设计网站作品个人做房产网站

大作设计网站作品,个人做房产网站,上海优化公司排行榜,joomla网站迁移前言在开发过程中#xff0c;肯定避免不了读取文件操作#xff0c;比如读取配置文件、上传和下载文件、Web中html、js、css、图片等静态资源的访问#xff1b;在配置文件读取章节中有说到#xff0c;针对不同配置源数据读取由对应的IConfigurationProvider进行读取#xf… 前言在开发过程中肯定避免不了读取文件操作比如读取配置文件、上传和下载文件、Web中html、js、css、图片等静态资源的访问在配置文件读取章节中有说到针对不同配置源数据读取由对应的IConfigurationProvider进行读取其实读取文件也是一样针对于不同类型(物理文件、嵌入文件、云端文件等)文件就由对应的IFileProvider的实现进行读取下面详细说说正文由于通过IFileProvider将目录文件进行抽象化统一规范读取操作使得读取不同地方的文件就显得更加方便如物理文件、嵌入文件只要有对应的实现即可而框架针对物理文件和嵌入文件已经进行了具体实现如下PhysicalFileProvider物理文件提供程序用来读取物理文件就是平时使用的文件不管是扩展名是什么EmbeddedFileProvider嵌入文件提供程序用来读取嵌入文件就是程序编译时嵌入到程序集内部的文件就像资源文件一样CompositeFileProvider组合提供程序同时可以读取物理文件和嵌入文件就是可以指定多种数据源这样的好处就是像操作同一个数据源一样后续也可以与自定义的提供程序进行组合为了避免直接扒代码懵圈先来个控制台例子体验一下以上xxxProvider的使用运行结果读取物理文件是不是很简单其实就是创建了一个PhysicalFileProvider对象时指定了一个路径然后就能很方便的获取到对应目录下的信息嵌入文件也是如此只需指定对应程序集即可(因为嵌入文件已经编译到程序集中)如下优化代码运行结果如下同样也是使用很简单只是在创建EmbeddedFileProvider对象时指定一下对应的程序集即可后续便可以用统一的方式进行文件和目录操作组合提供程序的目的就是将不同提供程序整合就像使用同一个源一样如下当然按老套路走不能用用就行了继续扒扒代码先看看IFileProvidernamespace Microsoft.Extensions.FileProviders {// IFileProvider定义的三个方法其实就是其对应的三大功能public interface IFileProvider{// 获取指定文件的信息之后可以文件进行读取操作IFileInfo GetFileInfo(string subpath);// 获取指定目录下所有内容IDirectoryContents GetDirectoryContents(string subpath);// 用于监听文件改变IChangeToken Watch(string filter);} } 再来看看返回的IFileInfo和IDirectoryContents namespace Microsoft.Extensions.FileProviders {public interface IFileInfo{// 标识是否存在bool Exists{get;}// 文件大小如果不存在或是目录这个值就是-1long Length{get;}// 对应的物理路径其实就是文件的实际路径string PhysicalPath{get;}// 文件名字string Name{get;}// 文件最后的修改时间DateTimeOffset LastModified{get;}// 标识是否是目录bool IsDirectory{get;}// 返回的留可以进行文件读取Stream CreateReadStream();}// 其他信息继承了IFileInfo信息public interface IDirectoryContents : IEnumerableIFileInfo, IEnumerable{// 标识指定目录是否存在bool Exists{get;}} } IChangeToken 之前在配置文件监听的时候有提到过是用来监听到文件改变时进行发送通知的这里就不深入了感兴趣的小伙伴可以研究研究PhysicalFileProvider和EmbeddedFileProvider两个挑PhysicalFileProvider这个看看后者小伙伴私下去扒吧namespace Microsoft.Extensions.FileProviders {// 这里只挑了几个关键方法说明其他属性和方法删除public class PhysicalFileProvider : IFileProvider, IDisposable{// 判断路径是否在指定的根路径下private bool IsUnderneathRoot(string fullPath){return fullPath.StartsWith(Root, StringComparison.OrdinalIgnoreCase);}// 获取指定路径文件的FileInfo信息public IFileInfo GetFileInfo(string subpath){// 判断路径是否处匹配if (string.IsNullOrEmpty(subpath) || PathUtils.HasInvalidPathChars(subpath)){return new NotFoundFileInfo(subpath);}// 判断指定的路径是否是在根目录下subpath subpath.TrimStart(_pathSeparators);if (Path.IsPathRooted(subpath)){return new NotFoundFileInfo(subpath);}// 获取全路径因为一般在外面操作是根据相对路径进行操作string fullPath GetFullPath(subpath);if (fullPath null){return new NotFoundFileInfo(subpath);}// 构建了一个文件信息包含文件的的操作和属性FileInfo fileInfo new FileInfo(fullPath);if (FileSystemInfoHelper.IsExcluded(fileInfo, _filters)){return new NotFoundFileInfo(subpath);}// 封装成PhysicalFileInfo对象return new PhysicalFileInfo(fileInfo);}// 获取指定目录下的所有内容public IDirectoryContents GetDirectoryContents(string subpath){try{ // 路径校验和上面一样if (subpath null || PathUtils.HasInvalidPathChars(subpath)){return NotFoundDirectoryContents.Singleton;}subpath subpath.TrimStart(_pathSeparators);if (Path.IsPathRooted(subpath)){return NotFoundDirectoryContents.Singleton;}string fullPath GetFullPath(subpath);if (fullPath null || !Directory.Exists(fullPath)){return NotFoundDirectoryContents.Singleton;}// 封装为PhysicalDirectoryContents对象return new PhysicalDirectoryContents(fullPath, _filters);}catch (DirectoryNotFoundException){}catch (IOException){}return NotFoundDirectoryContents.Singleton;}// 用监听文件改变的通过文件匹配模式来指定需要监控的文件public IChangeToken Watch(string filter){if (filter null || PathUtils.HasInvalidFilterChars(filter)){return NullChangeToken.Singleton;}filter filter.TrimStart(_pathSeparators);return FileWatcher.CreateFileChangeToken(filter);}} } 以上GetDirectoryContents和GetFileInfo分别返回的PhysicalDirectoryContents和PhysicalFileInfo才是关键进去瞅瞅public class PhysicalDirectoryContents : IDirectoryContents, IEnumerableIFileInfo, IEnumerable {// 用于存放指定目录下的全部内容的private IEnumerableIFileInfo _entries;// 判断指定目录是否存在public bool Exists Directory.Exists(_directory);// 读取目录内容的关键方法private void EnsureInitialized(){try{// 根据指定的目录获取目录下的所有内容将其保存在集合中_entries new DirectoryInfo(_directory).EnumerateFileSystemInfos().Where((FuncFileSystemInfo, bool)((FileSystemInfo info) !FileSystemInfoHelper.IsExcluded(info, _filters))).Select((FuncFileSystemInfo, IFileInfo)delegate (FileSystemInfo info){// 将取到的内容封装为PhysicalFileInfo对象FileInfo fileInfo info as FileInfo;if (fileInfo ! null){return new PhysicalFileInfo(fileInfo);}// 将取到的内容封装为PhysicalFileInfo对象DirectoryInfo directoryInfo info as DirectoryInfo;if (directoryInfo ! null){return new PhysicalDirectoryInfo(directoryInfo);}throw new InvalidOperationException(Unexpected type of FileSystemInfo);});}catch (Exception ex) when (ex is DirectoryNotFoundException || ex is IOException){_entries Enumerable.EmptyIFileInfo();}} } PhysicalFileInfo// 其实里面就是封装了IO文件操作的相关属性和操作 public class PhysicalFileInfo : IFileInfo {// 文件信息就是平时咱们直接读取到文件的那些信息private readonly FileInfo _info;// 是否存在public bool Exists _info.Exists;// 文件大小public long Length _info.Length;// 文件的全路径public string PhysicalPath _info.FullName;// 文件名称public string Name _info.Name;// 文件的最后修改时间public DateTimeOffset LastModified _info.LastWriteTimeUtc;// 默认就是false所以这里只能对文件有效public bool IsDirectory  false;public PhysicalFileInfo(FileInfo info){_info info;}// 获取文件流并设置了只读权限public Stream CreateReadStream(){int bufferSize 1;// 这里就熟悉了平时直接读取文件就是这样的return new FileStream(PhysicalPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, bufferSize, FileOptions.SequentialScan | FileOptions.Asynchronous);} }好了到这其实差不多就明白了至少知道为什么IFileInfo只能获取到文件件信息目录信息获取不到至少在写文件的时候不再懵逼的在想为什么不能写文件了如果直接用返回的流进行文件写操作就会报以下错总结框架只是实现了本地读取的两个IFileProvider如果针对于云端文件、FTP文件等有统一的读取需求则就需要自己实现了所以源码是不错的参考封装之后结合组合提供程序后续使用就能像使用本地文件一样简便 加上这篇总共十五篇把.NetCore中比较关键的核心都过了一遍其中包含了启动流程、依赖注入、配置、选项、日志、中间件、文件在每个章节中都会针对对应的核心类型进行源代码分析虽然只是浅读但也能明白其中缘由后续的文章将会偏应用比如静态文件目录配置、API的最佳实现、JWT使用、IdentityServer4的集成等等一堆组件的应用同时后续将同步开启另一个专题跟我一起学Redis欢迎一起来学习------------------------------------------------CSDNCode综艺圈知乎Code综艺圈掘金Code综艺圈博客园Code综艺圈bilibiliCode综艺圈------------------------------------------------一个被程序搞丑的帅小伙关注Code综艺圈识别关注跟我一起学~~~撸文不易莫要白瞟三连走起~~~~
http://www.zqtcl.cn/news/901614/

相关文章:

  • 北京哪个公司做网站专业建站培训
  • 郑州知名网站推广网站管理设置
  • 建设工程网站资质人员查询常州模板网站建设价格
  • 自己建网站做app手机网站列表页源码
  • 企业网站模板seo网站建设关键词优化
  • 平面毕业设计作品网站推广普通话ppt
  • p2p网站开发思路方案免费建简单网站
  • 微信朋友圈的网站连接怎么做互联网工程有限公司
  • 高大上企业网站优秀的门户网站
  • 做seo对网站推广有什么作用自己做电商网站吗
  • 网站从哪些方面来做泉州网页搜索排名提升
  • 网站建设可以给公司带来想做网站开发兼职
  • 天津市免费建站精美大气的餐饮类企业网站
  • 购物网站那个信用好又便宜手机模板的网站
  • 建筑企业资质查询网站怎么查网络服务商
  • 汉川市城乡建设局网站企业销售网站建设
  • 梅州建设网站域名购买流程
  • 单页网站与传统网站的区别wordpress对接微信
  • 做公司网站深圳旅游
  • 最好企业网站网站建设 的销售图片
  • 怎么创建网站 免费滴做网站算运营吗
  • 廊坊网站建设-商昊网络正规网站优化推广
  • 网站建设拍金手指排名贰贰安装wordpress数据库错误
  • 食品网站建设需求分析购物app大全
  • 电商美工广州seo技术外包公司
  • 重庆旅游seo整站优化深圳宝安区是富人区吗
  • 网站开发验收模板网站欧美风格
  • 自己做发卡网站什么是网络设计制作
  • 如何搭建一个公司网站互联网推广怎么找客户
  • 江苏同隆建设集团有限公司网站asp.net新建网站