首页 > 解决方案 > Linux 容器上 Windows 共享的 PhysicalFileProvider 路径

问题描述

我有一项服务使用

物理文件提供者

观看 Windows 共享上的文件。当我在 Windows 上运行此代码时,它可以工作。当我在 docker 容器中运行它时,它不起作用。

我应该如何在我的 appsettings 中指定要在 Linux docker 容器上运行的文件夹路径

public class FileWatcher : BackgroundService
{
    private readonly string _folderToWatch;
    private  PhysicalFileProvider _fileProvider;
    private IChangeToken _fileChangeToken;

    public FileWatcherBase(string folderToWatch)
    {
        WatchConfig = watchConfig;
        _folderToWatch = folderToWatch;
    }
    
    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        _fileProvider = new PhysicalFileProvider(_folderToWatch); 
        await Task.Run(FolderWatch, stoppingToken);
    }

    private void FolderWatch()
    {
        _fileChangeToken = _fileProvider.Watch($"*.txt");
        _fileChangeToken.RegisterChangeCallback(Notify, default);
    }
    private void Notify(object state)
    {
        // do something 
    }
}

这是配置中的路径,这是传递给服务的内容 "SourceFolder": "\\\\myshare\\files"

我得到的例外是:

路径必须是绝对的。(参数“根”)在 Microsoft.Extensions.FileProviders.PhysicalFileProvider

如果我将路径设置为

`"SourceFolder": "/myshare/files"`

我得到一个

找不到路径异常

标签: c#.netasp.net-corefile-watcherlinux-containers

解决方案


推荐阅读