了解ASP.NET Core 中的文件提供程序

写在前面

ASP.NET Core 通过文件提供程序来抽象化文件系统访问。分为物理文件提供程序(PhysicalFileProvider)和清单嵌入的文件提供程序(ManifestEmbeddedFileProvider)还有复合文件提供程序(CompositeFileProvider );其中PhysicalFileProvider 提供对物理文件系统的访问,而ManifestEmbeddedFileProvider 用于访问嵌入在程序集中的文件,而 CompositeFileProvider 合并 IFileProvider 实例,以便公开一个接口来处理多个提供程序中的文件,相当于前面两种的混合集。

物理和清单嵌入文件提供程序都实现了IFileProvider 接口,然后通过 IFileProvider.Watch 方法提供一种方法来监视一个或多个文件或目录的更改。

使用时需要通过NuGet安装两个拓展:

代码实现

本文只提供了 PhysicalFileProvider 的代码示例:

cs 复制代码
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Primitives;
using System.Text;

var physicalFileProvider = new PhysicalFileProvider(@"E:\softwares");

var manifestEmbeddedProvider = new ManifestEmbeddedFileProvider(typeof(Program).Assembly);

var compositeProvider = new CompositeFileProvider(physicalFileProvider, manifestEmbeddedProvider);

// 通过表达式筛选需要监控的文件或目录(Watch可以使用例如 *.* 进行文件通配)
ChangeToken.OnChange(() => physicalFileProvider.Watch("Test.txt"), async () =>
{
    Console.Clear();
    IFileInfo fileInfo = physicalFileProvider.GetFileInfo("Test.txt");
    await using var stream = fileInfo.CreateReadStream();
    var buffer = new byte[stream.Length];
    await stream.ReadAsync(buffer, 0, buffer.Length);
    Console.WriteLine(Encoding.Default.GetString(buffer));
});

Console.Read();

项目配置

XML 复制代码
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.FileProviders.Composite" Version="8.0.0" />
    <PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="8.0.0" />
    <PackageReference Include="Microsoft.Extensions.FileProviders.Physical" Version="8.0.0" />
  </ItemGroup>

    <ItemGroup>
	    <EmbeddedResource Include="Resource.txt" />
    </ItemGroup>

</Project>

调用示例

在示例中由物理文件提供程序指定的目录中,监控Test.txt文件,当文件内容发生变化时就会将最新的内容打印到控制台。

相关推荐
吴可可1238 小时前
多段线局部约束缩放实现
c#
棉晗榜12 小时前
C# HttpClient配置具有tls指纹发起跟浏览器一样的请求解决反爬虫防护
开发语言·爬虫·c#
吴可可12313 小时前
在CAD中点击添加多段线顶点的方法与实现
c#
全栈小513 小时前
【C#】.net core,静态方法线程安全解析,面试时经常被问的线程安全就藏在里面
安全·c#·.netcore
天下无敌笨笨熊14 小时前
C#视频开发心得
开发语言·c#·音视频
LccKyI14 小时前
C#基础编程 面试题汇总(三)
笔记·c#
半亩码田16 小时前
C#转Python第4.1篇:当 try-catch 遇上 try-except:异常处理的大不同
开发语言·python·c#
z落落17 小时前
C# Modbus-RTU 串口读写设备+CRC16+邮件告警
开发语言·c#
DS随心转小程序17 小时前
Gemini只能导出了一部分Word文档,很少的一部分,不是我这个窗口所有的对话内容?
开发语言·人工智能·c#·word·豆包·deepseek·ai导出鸭
格林威17 小时前
C# 相机图像配合频闪光源:实现高速稳定拍摄的几个方法
开发语言·网络·人工智能·数码相机·计算机视觉·c#·视觉检测