I found myself wanting to know if two file names were the same file on disk. It's hard to check that
just by looking at the name. Obviously you have issues like one might be absolute, one might be
relative. Even if you fix that, they could be different A-code-pageizations of unicode names. And
something I hit often is one of them might be on a "subst" or even a hard link. I want to know if they
are actually the same file.
This appears to work :
bool IsSameFile(char * Name1,char * Name2)
{
HANDLE f1,f2;
BY_HANDLE_FILE_INFORMATION info1;
BY_HANDLE_FILE_INFORMATION info2;
f1 = CreateFile(Name1,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,0,0);
if ( f1 == INVALID_HANDLE_VALUE )
return false;
f2 = CreateFile(Name2,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,0,0);
if ( f2 == INVALID_HANDLE_VALUE )
{
CloseHandle(f1);
return false;
}
GetFileInformationByHandle(f1,&info1);
GetFileInformationByHandle(f2,&info2);
CloseHandle(f1);
CloseHandle(f2);
// BY_HANDLE_FILE_INFORMATION has a unique file ID and Volume Serial Number in it
// check those are the same
// heh fuck it just check they are all the same
// confirmed : this does work across substs
return memcmp(&info1,&info2,sizeof(info1)) == 0;
}
"11-06-09 - IsSameFile"
No comments yet. -