|
> そこで、この二つのファイル名が同じファイルを指しているかどうかを
> 判定したいのですが、どうすればよいのでしょうか?
>環境は Windows (VC6) です。
FileInformation を取得して、VolumeSerialNumber と FileIndex が一致する
かどうかを確かめればよいはずですが、もっと簡単な方法はないのかな?
#include <windows.h>
int same_file(const char *f1, const char *f2)
{
HANDLE h1, h2; BY_HANDLE_FILE_INFORMATION fi1, fi2;
h1 = CreateFile(f1, GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (h1 == INVALID_HANDLE_VALUE) return 0;
h2 = CreateFile(f2, GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (h2 == INVALID_HANDLE_VALUE) { CloseHandle(h1); return 0; }
if (!GetFileInformationByHandle(h1, &fi1)) return 0;
if (!GetFileInformationByHandle(h2, &fi2)) return 0;
CloseHandle(h1); CloseHandle(h2);
return fi1.dwVolumeSerialNumber == fi2.dwVolumeSerialNumber
&& fi1.nFileIndexHigh == fi2.nFileIndexHigh
&& fi1.nFileIndexLow == fi2.nFileIndexLow;
}
|