文件系统设计详解
抽象的文件系统以目录的形式来组织文件,我们可以利用该文件系统来读取某个文件的内容,也可以对目录或者文件实施监控并及时获取变化的通知。
IChangeToken
IChangeToken对象就是一个与某组监控数据相关联的“令牌”(Token),它能够在检测到数据改变时及时对外发出一个通知。
①HasChanged
当IChangeToken 对象关联的数据发生改变时,返回true
②RegisterChangeCallback
在数据发生改变时可以自动执行的回调,该方法会返回一个 IDisposable 对象,可以用其Dispose方法解除注册的回调
③ActiveChangeCallbacks
当数据发生变化时是否需要主动执行注册的回调操作
IFileProvider
不论是目录还是文件都通过一个 IFileInfo 对象来表示
CreatCreateReadStream方法返回的Stream对象读取文件的内容
PhysicalFileProvider
System.IO 命名空间下定义了一整套针对操作物理目录和文件的API,但PhysicalFileProvider最终也是通过调用这些API来完成相关的IO操作的。
PhysicalFileProvider的 Watch方法中指定的 Globbing Pattern表达式必须是针对当前根目录的相对路径,可以使用“/”或者“./”前缀,也可以不采用任何前缀。一旦使用了绝对路径(如“c:\test\*.txt”)或者“../”前缀(如“../test/*.txt”),不论解析出的文件是否存在于PhysicalFileProvider 的根目录下,这些文件都不会被监控。
EmbeddedFileProvider
由于内嵌于程序集的资源文件采用扁平化存储形式,所以通过EmbeddedFileProvider 构建的文件系统中并没有目录层级的概念。可以认为所有的资源文件都保存在程序集的根目录下
对于内嵌资源文件系统来说,根本就不存在所谓的文件更新问题,所以它的Watch方法会返回一个HasChanged属性总是False的IChangeToken对象
将项目文件变成内嵌资源
在.csproj文件中添加<ItemGroup>/<EmbeddedResource>元素,并利用Include属性显式地将对应的资源文件包含进来
<EmbeddedResource>具有两个属性:Include 属性用来添加内嵌资源文件,Exclude 属性负责排除不符合要求的文件