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

时间:2018-06-11 15:07:59

标签: c# directory filesystemwatcher audit shared-directory

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

我的简化代码:

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]与系统审计事件进行比较

1 个答案:

答案 0 :(得分:0)

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

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