Как обнаружить NTFS смонтированные папки в C #? - PullRequest
2 голосов
/ 30 января 2009

Давным-давно я читал, как вы программно обнаруживаете смонтированные папки NTFS (может вызывать циклическую рекурсию при поиске по папкам). Теперь я не могу найти ссылку .. Кто-нибудь знает, как это сделать?

Интересующее меня обнаружение монтирования происходит, когда одна папка монтируется в другую папку.

Ответы [ 2 ]

2 голосов
/ 30 января 2009

Полагаю, вы имеете в виду NTFS-переход ? Существует неуправляемый API для получения точки повторной обработки, который затем вам нужно опросить , чтобы увидеть, действительно ли это соединение. Это все доступно через P / Invoke , конечно.

Но большинство людей просто (1) ищут ReparsePoint в списке атрибутов , возвращаемых DirectoryInfo.GetDirectories .

(1) Обратите внимание, что NTFS Junction - это определенный тип точки повторного анализа , но не единственный. Символьные ссылки, жесткие ссылки, (2) и любые другие данные, определенные пользователем, также являются точками повторной обработки.

(2) Упс. Жесткие ссылки - это не точки повторной обработки, - это просто стандартные записи каталога, указывающие на один и тот же файл . Спасибо Рувиму за то, что поправили меня.

0 голосов
/ 30 января 2009

Сделайте это через WMI. Смотрите образец по адресу: http://msdn.microsoft.com/en-us/library/aa393244(VS.85).aspx

Или попробуйте этот пример кода, созданный с помощью WMI Code Creator :


using System;
using System.Management;
using System.Windows.Forms;

namespace WMISample
{
    public class MyWMIQuery
    {
        public static void Main()
        {
            try
            {
                ManagementObjectSearcher searcher = 
                    new ManagementObjectSearcher("root\\CIMV2", 
                    "SELECT * FROM Win32_DiskPartition"); 

                foreach (ManagementObject queryObj in searcher.Get())
                {
                    Console.WriteLine("-----------------------------------");
                    Console.WriteLine("Win32_DiskPartition instance");
                    Console.WriteLine("-----------------------------------");
                    Console.WriteLine("Type: {0}", queryObj["Type"]);
                }
            }
            catch (ManagementException e)
            {
                MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
            }
        }
    }
}
...