Преобразовать сетевой ресурс общего доступа в путь к физической папке - PullRequest
0 голосов
/ 11 июня 2018

У меня есть консольное приложение, которое использует 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, однако это не идеальный вариант, поскольку физическое расположение папки общего сетевого ресурса может измениться.

PS Если вы считаете необходимым обоснованиедля этого мне нужен физический путь, так как я сравниваю путь события [e.FullPath] с событиями аудита системы

1 Ответ

0 голосов
/ 14 июня 2018

Используя ManagementObjectSearcher в пространстве имен System.Management, вы можете запросить у удаленного сервера определение Win32_Share общего ресурса в WMI и построить соответствующий локальный путь.

Статья Получитьлокальный путь из UNC-пути содержит пример кода, подробно описывающий, как это сделать.

...