.net core 文件提供程序 电脑版发表于:2020/8/4 11:01 ![.netcore](https://img.tnblog.net/arcimg/hb/c857299a86d84ee7b26d181a31e58234.jpg ".netcore") >#.net core 文件提供程序 [TOC] 文件提供程序核心类型 ------------ - IFileProvider (提供文件读写程序的接口,通过抽象的定义,让我们与具体的文件的代码进行隔离) - IFileInfo - IDirectoryContents 内置文件提供程序 ------------ - PhysicalFileProvider(物理文件提供程序) - EmbeddedFileProvider(嵌入式的文件提供程序) - CompositeFileProvider(组合文件的提供程序,多源合一) IFileProvider的定义 ------------ | 方法名 | 注释 | | ------------ | ------------ | | IFileInfo GetFileInfo(string subpath) | 获取文件信息 | | IDirectoryContents GetDirectoryContents(string subpath) | 获取我们指定目录下的目录信息 | IDirectoryContents的定义 ------------ tn>IDirectoryContents 实现了 `IEnumberable<IFileInfo>` 接口,所以我们可以获取目录下文件的 `IFileInfo` | 属性名 | 注释 | | ------------ | ------------ | | bool Exists | 当前目录是否存在 | IFileInfo的定义 ------------ | 属性名 | 注释 | | ------------ | ------------ | | bool Exists | 当前文件是否存在 | | long Length | 文件的长度 | | string PhysicalPath | 当前物理地址 | | string Name | 文件名 | | DateTimeOffset LastModified | 最后修改的时间 | | bool IsDirectory | 它是否是一个目录 | | Stream CreateReadStream() | 读取我们的文件流 | 目录 ------------ >###项目结构 ![](https://img.tnblog.net/arcimg/hb/4883dbdd02c248c7966a44a402359c50.png) <br/> >###打印出编译目录下的程序集 <br/> ><font style="color:#2ecc71;font-weight:bold;">Program.cs</font> ```csharp #region 映射程序根目录 IFileProvider provider = new PhysicalFileProvider(AppDomain.CurrentDomain.BaseDirectory); var contents = provider.GetDirectoryContents("/"); foreach (var item in contents) { Console.WriteLine(item.Name); } #endregion ``` >运行结果 ![](https://img.tnblog.net/arcimg/hb/6c14c55f2d2248f39b50dc0cd62516f0.png) <br/> >###获取嵌入式资源中的内容 <br/> >将`a.html`设置为嵌入式资源 ![](https://img.tnblog.net/arcimg/hb/39740a30b5e04ca3ba7e19bc414dba2f.png) ><font style="color:#2ecc71;font-weight:bold;">Program.cs</font> ```csharp #region 获取嵌入式资源文件内容 IFileProvider provider = new EmbeddedFileProvider(typeof(Program).Assembly); //获取嵌入式资源文件 var html = provider.GetFileInfo("a.html"); //读取文件流 Stream stream = html.CreateReadStream(); //定义流字符的长度 byte[] b = new byte[stream.Length]; //写入byte中 stream.Read(b, 0, b.Length); //转换成字符串类型 string htmlText = Encoding.Default.GetString(b); Console.WriteLine($"Context: {htmlText}"); #endregion ``` >运行结果 ![](https://img.tnblog.net/arcimg/hb/be8f9b8341624fc0babe814e8fe552df.png) <br/> >###获取嵌入式资源中的内容 <br/> ><font style="color:#2ecc71;font-weight:bold;">Program.cs</font> ```csharp #region 组合目录程序 IFileProvider provider1 = new PhysicalFileProvider(AppDomain.CurrentDomain.BaseDirectory); IFileProvider provider2 = new EmbeddedFileProvider(typeof(Program).Assembly); //组合 provider1 与 provider2 使它们成为一个目录 IFileProvider provider = new CompositeFileProvider(provider1, provider2); var contents = provider.GetDirectoryContents("/"); foreach (var item in contents) { Console.WriteLine(item.Name); } #endregion ``` >运行结果 ![](https://img.tnblog.net/arcimg/hb/c76fe84f13c44a9d831fddb09bf37ddc.png) <br/> 未完待续。。。。