我有一个控制台应用程序,它使用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]与系统审计事件进行比较
答案 0 :(得分:0)
使用ManagementObjectSearcher
命名空间中的System.Management
,您可以在远程服务器中查询WMI中共享的Win32_Share
定义,并构建相应的本地路径。
文章Get local path from UNC path包含详细说明如何执行此操作的示例代码。