其他分享
首页 > 其他分享> > .NET Core笔记-File Providers(文件系统)

.NET Core笔记-File Providers(文件系统)

作者:互联网

IFileProvider

File Providers是文件系统之上的一层抽象。它的主要接口是IFileProvider
IFileProvider公开了相应方法用来获取文件信息(IFileInfo), 目录信息(IDirectoryContents),以及设置更改通知(通过使用一个IChangeToken)

IFileInfo

IFileProvider的三种实现

PhysicalFileProvider

PhysicalFileProvider提供了对物理文件系统的访问。
当实例化此类provider时,你必须为它提供一个目录路径,作为这个provider发出的所有请求的基础路径(这个provider会限制路径以外的访问请求)
使用方式:直接new实例化PhysicalFileProvider;也可以通过注入IFileProvider的方式使用
方式1:直接new

IFileProvider provider = new PhysicalFileProvider(applicationRoot);
IDirectoryContents contents = provider.GetDirectoryContents(""); // the applicationRoot contents
IFileInfo fileInfo = provider.GetFileInfo("wwwroot/js/site.js"); // a file under applicationRoot

方式2:注入IFileProvider

        public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddMvc();

            var physicalProvider = _hostingEnvironment.ContentRootFileProvider;
            var embeddedProvider = new EmbeddedFileProvider(Assembly.GetEntryAssembly());
            var compositeProvider = new CompositeFileProvider(physicalProvider, embeddedProvider);

            // choose one provider to use for the app and register it
            //services.AddSingleton<IFileProvider>(physicalProvider);
            //services.AddSingleton<IFileProvider>(embeddedProvider);
            services.AddSingleton<IFileProvider>(compositeProvider);
        }
public class HomeController : Controller
{
    private readonly IFileProvider _fileProvider;

    public HomeController(IFileProvider fileProvider)
    {
        _fileProvider = fileProvider;
    }

    public IActionResult Index()
    {
        var contents = _fileProvider.GetDirectoryContents("");
        return View(contents);
    }
}

EmbeddedFileProvider

EmbeddedFileProvider用于访问嵌入到程序集中的文件。
可以将文件的生成操作属性改为"嵌入的资源",来将文件嵌入程序集
创建EmbeddedFileProvider需要传入一个程序集:

var embeddedProvider = new EmbeddedFileProvider(Assembly.GetEntryAssembly());
//EmbeddedFileProvider构造器接受一个可选的baseNamespace参数,指定此参数将限定GetDirectoryContents方法调用该命名空间下的资源

CompositeFileProvider

CompositeFileProvider用于对前两种方式的组合使用。当创建一个CompositeFileProvider时,你可以为它的构造函数传入一个或多个IFileProvider实例。

var physicalProvider = _hostingEnvironment.ContentRootFileProvider;
var embeddedProvider = new EmbeddedFileProvider(Assembly.GetEntryAssembly());
var compositeProvider = new CompositeFileProvider(physicalProvider, embeddedProvider);

通配符模式

*:表示在当前文件夹级别上匹配任何文件名称或文件扩展名
**:表示在多个目录级别上匹配任何文件名称或文件扩展名
案例:

//在指定的文件夹中匹配指定的文件
directory/file.txt

//在指定的文件夹中匹配所有以.txt扩展名结尾的文件
directory/*.txt

//在指定的directory文件夹下的一级目录位置中匹配所有符合project.json名称的文件
directory/*/project.json

//在指定的directory文件夹下的所有位置中匹配所有以.txt扩展名结尾的文件
directory/**/*.txt

参考:
https://www.cnblogs.com/Wddpct/p/6128386.html
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/file-providers?view=aspnetcore-3.1

标签:Core,Providers,IFileProvider,EmbeddedFileProvider,文件,File,provider,var,new
来源: https://www.cnblogs.com/fanfan-90/p/13940671.html