将网络共享路径转换为物理文件夹路径

Convert Network share path to a physical folder path

我有一个使用 FileSystemWatcher 监视文件夹的控制台应用程序,它会在 file/folder 被删除时触发一个事件。

我的简化代码:

using System;
using System.Configuration;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;

namespace FileWatcherConsole
{
    class Program 
    {
        static void Main(string[] args)
        {
            Program program = new Program();
            FileSystemWatcher watcher = new FileSystemWatcher
            {
                Path = "\Server1",
                IncludeSubdirectories = true,
                EnableRaisingEvents = true,
                NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName,
                Filter = "*.*"
            };
            watcher.Deleted += new FileSystemEventHandler(program.OnDeleted);
            new AutoResetEvent(false).WaitOne();
        }

        private void OnDeleted(object sender, FileSystemEventArgs e)
        {
            Console.WriteLine(e.FullPath);
        }
    }
}

该应用程序按预期工作,但在观看输出为

的网络共享文件夹时除外
\Server1\SharedFolder

不过我更喜欢文件夹的物理路径:

C:\Users\myUser\Desktop\SharedFolder

那么有没有办法以编程方式将网络路径转换为物理路径?

我知道一种解决方案是在实例化 FileSystemWatcher 时使用物理路径,但这并不理想,因为网络共享文件夹的物理位置可能会发生变化。

P.S。如果您认为这背后的原因有必要,我需要物理路径,因为我正在比较事件路径 [e.FullPath] 与系统审计事件

使用 System.Management 命名空间中的 ManagementObjectSearcher 您可以查询远程服务器以获取 WMI 中共享的 Win32_Share 定义并构建相应的本地路径。

文章 Get local path from UNC path 中有详细说明如何执行此操作的示例代码。