昔々、マウントされたNTFSフォルダをプログラムで検出する方法を読みました(フォルダを検索するときに周期的な再帰が発生する可能性があります)。今私はリンクを見つけることができません..誰かがこれを行う方法を知っていますか?
私が検出したいマウントは、あるフォルダーが別のフォルダーにマウントされたときです。
NTFSジャンクションを意味していると思いますか?リパースポイントを取得するためのアンマネージ APIがあります。これを調べて、実際にジャンクションであるかどうかを確認する必要があります。もちろん、これはすべてP/Invoke を介して利用できます。
しかし、ほとんどの人は (1) DirectoryInfo.GetDirectoriesによって返される属性のリストでReparsePointを探すだけです。
(1) NTFS ジャンクションは特定のタイプの再解析ポイントですが、唯一のものではないことに注意してください。シンボリック リンク、ハード リンク、 (2)、およびその他のユーザー定義データも再解析ポイントです。
(2) おっと。ハード リンクは再解析ポイントではなく、同じファイルを指す標準のディレクトリ エントリです。それについて私を修正してくれたReubenに感謝します。
これは 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);
}
}
}
}