问题
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 hard links exist (to WinSxS components) in Windows 7/Vista. But how can I programmatically distinguish hard links from real files in Windows 7?
回答1:
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.
回答2:
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.
回答3:
Use GetFileInformationByHandle() and check the returned BY_HANDLE_FILE_INFORMATION nNumberOfLinks member for a value > 1.
来源:https://stackoverflow.com/questions/3636820/how-can-i-programmatically-distinguish-hard-links-from-real-files-in-windows-7