private static BY_HANDLE_FILE_INFORMATION GetFileInformationByHandleNet(IntPtr hFile) { BY_HANDLE_FILE_INFORMATION ret = new BY_HANDLE_FILE_INFORMATION(); if (!GetFileInformationByHandle(hFile, out ret)) { Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error()); } return(ret); }
public static bool IsSameFile(string path1, string path2) { bool ret = false; //Check that the files exist... if they don't then they can't be the same if (!File.Exists(path1)) { return(false); } if (!File.Exists(path2)) { return(false); } //Open file 1 IntPtr file1 = CreateFileNet(path1, EFileAccess.GenericRead, EFileShare.Read | EFileShare.Write, IntPtr.Zero, ECreationDisposition.OpenExisting, EFileAttributes.Normal, IntPtr.Zero); //Open file 2 try { IntPtr file2 = CreateFileNet(path2, EFileAccess.GenericRead, EFileShare.Read | EFileShare.Write, IntPtr.Zero, ECreationDisposition.OpenExisting, EFileAttributes.Normal, IntPtr.Zero); try { BY_HANDLE_FILE_INFORMATION file1Info = GetFileInformationByHandleNet(file1); BY_HANDLE_FILE_INFORMATION file2Info = GetFileInformationByHandleNet(file2); if (file1Info.VolumeSerialNumber == file2Info.VolumeSerialNumber && file1Info.FileIndexHigh == file2Info.FileIndexHigh && file1Info.FileIndexLow == file2Info.FileIndexLow) { ret = true; } } finally { CloseHandleNet(file2); } } finally { CloseHandleNet(file1); } return(ret); }
private static extern bool GetFileInformationByHandle(IntPtr hFile, out BY_HANDLE_FILE_INFORMATION lpFileInformation);