.Net Core 文件提供程序

文件提供程序的三个核心接口

.Net Core 文件提供程序有三个主要的核心接口:

  • IFileProvider
  • IFileInfo
  • IDirectoryContents

IFileProvider

IFileProvider 接口是只读文件提供程序的抽象。
它定义了三个方法:

  • GetDirectoryContents(String) :枚举位于给定路径的目录(如果有)。
  • GetFileInfo(String) :在给定的路径查找某个文件。
  • Watch(String) :为指定的 filter 创建 IChangeToken。监听某个文件,当文件被修改时,会触发相应的操作。

IFileInfo

IFileInfo 接口定义了一些描述文件的属性:

  • Exists :文件如果存在,则为 True。
  • IsDirectory :是否为目录。
  • LastModified :获取上次修改文件的时间。
  • Length :文件的长度(以字节为单位);对于目录或非现有文件,则返回 -1。
  • Name :文件或目录的名称,不包括任何路径。
  • PhysicalPath :文件的路径,包括文件名。 如果不可直接访问该文件,则返回 null。

定义了一个方法:

  • CreateReadStream() :返回只读流形式的文件内容。 调用方在完成后应释放流。

IDirectoryContents

IDirectoryContents 接口定义了文件提供程序中的目录内容。它继承了 IEnumerable<IFileInfo> 和 IEnumerable ,具有以下属性:
-Exists :如果目录存在,则为 True。

内置文件提供程序

.Net Core 内置的比较实用的文件提供程序有三个:

  • PhysicalFileProvider
  • EmbeddedFileProvider
  • CompositeFileProvider

PhysicalFileProvider

PhysicalFileProvider 类,使用磁盘上的文件系统查找文件:

IFileProvider provider1 = new PhysicalFileProvider(AppDomain.CurrentDomain.BaseDirectory);
var contents = provider1.GetDirectoryContents("/");
foreach (var item in contents)
{
    Console.WriteLine(item.Name);
}

EmbeddedFileProvider

EmbeddedFileProvider 类,查找嵌入资源文件,区分大小写。

IFileProvider provider2 = new EmbeddedFileProvider(typeof(Program).Assembly);
var txt = provider2.GetFileInfo("test.txt");

CompositeFileProvider

EmbeddedFileProvider 类,组合文件提供程序,可以组合多个 IFileProvider :

IFileProvider provider1 = new PhysicalFileProvider(AppDomain.CurrentDomain.BaseDirectory);
IFileProvider provider2 = new EmbeddedFileProvider(typeof(Program).Assembly);
IFileProvider provider = new CompositeFileProvider(provider1, provider2);
var contents = provider.GetDirectoryContents("/");

在获取文件信息时,会遍历所以 IFileProvider ,若找到文件,则中断遍历,若找不到文件,则返回 NotFoundFileInfo 对象。

总结

PhysicalFileProvider 类,实现了 IFileProvider 、IDisposable 接口,其 GetFileInfo 方法返回的 PhysicalFileInfo 对象实现了 IFileInfo 接口 ;
EmbeddedFileProvider 类,实现了 IFileProvider 接口,其 GetFileInfo 方法返回的 EmbeddedResourceFileInfo 对象实现了 IFileInfo 接口 ;
在了解文件提供程序的实现原理后,我们可以自定义文件提供程序,比如获取OSS文件等。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值