Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
 private static extern bool GetFileInformationByHandle(IntPtr hFile,
                                                       out BY_HANDLE_FILE_INFORMATION lpFileInformation);