13

ファイルまたはディレクトリがシンボリック リンクジャンクション ポイントマウント ポイントハード リンクのいずれであるかを確認する方法を知っている人はいますか?

私の知る限り、ファイルの「ReparsePoint」属性をチェックすることでシンボリックリンクが検出されます。ジャンクション ポイントは、"ReparsePoint" 属性のディレクトリをチェックすることによって検出されます。したがって、「ReparsePoint」属性がファイルに設定されている場合、それはシンボリック リンクである必要があります。それ以外の場合、ディレクトリに設定されている場合、それはジャンクション ポイントになるだけです...そうですか?

ここまでは順調ですが、「マウント ポイント」と「ハード リンク」を検出する方法はまだわかりません。誰でもこれを行う方法を教えてもらえますか?

4

3 に答える 3

12

シンボリック リンク、ジャンクション ポイント、およびマウント ポイントはすべて、さまざまな再解析ポイントの例です。ただし、ハード リンクは単なる通常のファイルです。NTFS では、すべてのファイルがハード リンクです。ファイルを指す複数のハード リンクがあることは検出できますが、それが指す「実際のファイル」はありません。ハード リンクは、同じファイルの別の名前と考えることができます。

C# からの再解析ポイントへのアクセスに関する情報を次に示します: http://www.codeproject.com/KB/vista/ReparsePointID.aspx?display=Print

Cでそれを行う方法に関する情報は次のとおりです:http://blog.kalmbach-software.de/2008/02/

于 2010-03-21T13:42:53.857 に答える
5

ハードリンク:

Win32 API 関数GetFileInformationByHandleを呼び出すことで、複数の名前が同じ「データ チャンク」または「ファイル コンテンツ」を指しているかどうかを検出できます。返されたBY_HANDLE_FILE_INFORMATION構造体の nNumberOfLinks メンバーには、リンクの総数が含まれています。

マウント ポイント:

FindFirstVolumeMountPointFindNextVolumeMountPointを使用して、ボリューム上のすべてのマウント ポイントを反復処理できます。また、FindVolumeMountPointCloseを使用して検索ハンドルを閉じる必要があります。

.NET から

.NET からこれを行うには、いくつかの P/Invoke マジックが必要になります。

于 2011-02-21T14:53:51.390 に答える
2

私の質問NTFSジャンクションを参照してください。APIの理解に問題があります。質問の複製のようなものです。ただし、C / C ++を使用して、再解析ポイント、マウントポイント、ジャンクション、およびシンボリックリンクがどのように実装されるかについてすべて説明します。APIへのリンクを提供するだけでなく、やみくもに...

于 2011-03-01T18:18:55.320 に答える