Windows 7の実際のファイルとハードリンクをプログラムで区別するにはどうすればよいですか?
質問
ファイルサイズと使用済みディスクスペースに違いがあります(合計ファイルサイズはディスクサイズよりもさらに大きくなります)。 Windows 7/Vistaには(WinSXSコンポーネントに)多くのハードリンクが存在するためです。しかし、Windows 7の実際のファイルとハードリンクをプログラム的に区別するにはどうすればよいですか?
解決
すべてのファイルがハードリンクであるため、できません。いいえ、本当に。ファイルは、データチャンク(ディレクトリのリスト)へのハードリンクです。 (おそらくあなたはシンリンクを意味しますか?あなた できる それらを区別します...)
Windowsが提供するビルトインメソッドを使用して、代わりに使用済みスペースを計算します。
編集: 参照 (私の強調)
リンク自体はディレクトリエントリのみです, 、およびセキュリティ記述子がありません。したがって、ハードリンクのセキュリティ記述子を変更すると、基礎となるファイルのセキュリティ記述子を変更し、ファイルを指すすべてのハードリンクが新しく指定されたアクセスを許可します。
他のヒント
君 できません ハードリンクを「実際のファイル」と区別します。 「実際のファイル」のディレクトリエントリは、もう1つのハードリンクです。おそらく、あなたは象徴的なリンクを意味していました。
Posixには stat
関数(呼び出されます _stat
Windows)は、同じファイルへの複数のリンクを検出できます。
使用する getFileInFormationByHandle() 返されたものを確認してください by_handle_file_information 値> 1のnnumberoflinksメンバー。