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


    IFileProvider

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

    • Watch()方法:用来查看一个或多个文件/目录的更改信息。Watch方法接受一个路径字符串,它也可以使用通配符模式来指定多个文件,Watch方法最终返回一个IChangeToken。

    IFileInfo

    • IFileInfo接口提供了操作单个文件和目录的方法和属性。
    • Exists:是否存在
    • IsDirectory:是否是目录
    • Name:名称
    • Length:文件大小(按字节)
    • LastModified:最后修改时间
    • CreateReadStream():读取文件内容。

    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

  • 相关阅读:
    JDK 7 和 JDK 8 的区别
    浅显了解数据库存储引擎
    C++ 字符函数
    华为机试题 合唱队
    华为机试题 密码验证合格程序
    华为机试题 删除字符串中出现次数最少的字符
    如何解决机器学习中数据不平衡问题
    三分(求单峰或单谷)
    Vim配置——自动缩进(C/C++)
    Html日期控件
  • 原文地址:https://www.cnblogs.com/fanfan-90/p/13940671.html
Copyright © 2020-2023  润新知