开发者

How can I programmatically distinguish hard links from real files in Windows 7?

开发者 https://www.devze.com 2023-01-15 05:30 出处:网络
I have a difference between files size and used disk space (total file size is even more than disk size). I suppose because there are many开发者_StackOverflow中文版 hard links exist (to WinSxS compone

I have a difference between files size and used disk space (total file size is even more than disk size). I suppose because there are many开发者_StackOverflow中文版 hard links exist (to WinSxS components) in Windows 7/Vista. But how can I programmatically distinguish hard links from real files in Windows 7?


You can't, because all files are hard links. No. Really. A file is just a hard link to a data chunk -- a listing in a directory. (Perhaps you mean symlinks? You can distinguish those...)

Use the builtin methods Windows provides for calculating used space instead.

EDIT: Reference (emphasis mine)

The link itself is only a directory entry, and does not have a security descriptor. Therefore, when you change the security descriptor of a hard link, you a change the security descriptor of the underlying file, and all hard links that point to the file allow the newly specified access.


You can't distinguish hard links from "real files". The directory entry for a "real file" is just another hard link. Perhaps you meant a symbolic link.

POSIX has a stat function (called _stat in Windows) that can detect multiple links to the same file, which will have the same "inode" number.


Use GetFileInformationByHandle() and check the returned BY_HANDLE_FILE_INFORMATION nNumberOfLinks member for a value > 1.

0

精彩评论

暂无评论...
验证码 换一张
取 消