POSIXç°å¢ã¾ãã¯Windowsç°å¢ã«ã¦ã2ã¤ã®ãã¹æååãåä¸ãã¡ã¤ã«ãæããå¦ããå¤å®ããæ¹æ³ãï¼ãã¡ã¤ã«ãåå¨ãã¦ãããã¨ãåæï¼
POSIX
ããã¤ã¹IDã¨inodeçªå·*1ãç¨ãã¦åä¸æ§å¤å®ãè¡ãã
#include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int is_identical_file(const char* path1, const char* path2) { struct stat fs1, fs2; if (stat(path1, &fs1) == 0 && stat(path2, &fs2) == 0) { if (fs1.st_dev == fs2.st_dev && fs1.st_ino == fs2.st_ino) { return 1; } } return 0; }
Windows
ããªã¥ã¼ã ã·ãªã¢ã«çªå·ã¨ãã¡ã¤ã«ID*2ãç¨ãã¦åä¸æ§å¤å®ãè¡ãã
#include <windows.h> BOOL IsIdenticalFile(LPCTSTR szPath1, LPCTSTR szPath2) { static const DWORD shareMode = FILE_SHARE_DELETE|FILE_SHARE_READ|FILE_SHARE_WRITE; HANDLE h1 = INVALID_HANDLE_VALUE, h2 = INVALID_HANDLE_VALUE; BY_HANDLE_FILE_INFORMATION fi1, fi2; BOOL result = FALSE; h1 = CreateFile(szPath1, 0, shareMode, NULL, OPEN_EXISTING, 0, NULL); h2 = CreateFile(szPath2, 0, shareMode, NULL, OPEN_EXISTING, 0, NULL); if (h1 != INVALID_HANDLE_VALUE && h2 != INVALID_HANDLE_VALUE && GetFileInformationByHandle(h1, &fi1) && GetFileInformationByHandle(h2, &fi2)) { result = (fi1.dwVolumeSerialNumber == fi2.dwVolumeSerialNumber) && (fi1.nFileIndexHigh == fi2.nFileIndexHigh) && (fi1.nFileIndexLow == fi2.nFileIndexLow); } if (h1 != INVALID_HANDLE_VALUE) CloseHandle(h1); if (h2 != INVALID_HANDLE_VALUE) CloseHandle(h2); return result; }
é¢é£URL