ファイルサイズと使用済みディスク容量に違いがあります(合計ファイルサイズはディスクサイズよりもさらに大きくなります)。Windows 7 / Vistaには(WinSxSコンポーネントへの)多くのハードリンクが存在するためだと思います。しかし、Windows 7でハードリンクと実際のファイルをプログラムで区別するにはどうすればよいですか?
3 に答える
すべてのファイルがハードリンクであるため、できません。いいえ、本当に。ファイルは、データチャンク(ディレクトリ内のリスト)への単なるハードリンクです。(おそらくあなたはシンボリックリンクを意味しますか?あなたはそれらを区別することができます...)
代わりに、Windowsが使用スペースの計算に提供する組み込みの方法を使用してください。
編集:参照(私の強調)
リンク自体は単なるディレクトリエントリであり、セキュリティ記述子はありません。したがって、ハードリンクのセキュリティ記述子を変更すると、基になるファイルのセキュリティ記述子が変更され、ファイルを指すすべてのハードリンクが新しく指定されたアクセスを許可します。
ハードリンクと「実際のファイル」を区別することはできません。「実ファイル」のディレクトリエントリは、単なる別のハードリンクです。おそらくあなたはシンボリックリンクを意味していました。
POSIXには、同じ「inode」番号を持つ同じファイルへの複数のリンクを検出できるstat
関数(Windowsでは呼び出されます)があります。_stat
GetFileInformationByHandle()を使用して、返されたBY_HANDLE_FILE_INFORMATIONnNumberOfLinksメンバーの値が1より大きいかどうかを確認します。