예제 #1
0
        internal static bool FileEquals(string path1, string path2, FileCompareOptions options)
        {
            if ((options & FileCompareOptions.ModifiedTime) != 0 &&
                File.GetLastWriteTimeUtc(path1) != File.GetLastWriteTimeUtc(path2))
            {
                return(false);
            }

            if ((options & FileCompareOptions.Attributes) != 0 &&
                File.GetAttributes(path1) != File.GetAttributes(path2))
            {
                return(false);
            }

            if ((options & (FileCompareOptions.Size | FileCompareOptions.Content)) != 0)
            {
                using (var fs1 = new FileStream(path1, FileMode.Open, FileAccess.Read))
                    using (var fs2 = new FileStream(path2, FileMode.Open, FileAccess.Read))
                    {
                        if ((options & FileCompareOptions.Size) != 0 &&
                            fs1.Length != fs2.Length)
                        {
                            return(false);
                        }

                        if ((options & FileCompareOptions.Content) != 0 &&
                            !StreamComparer.Default.ByteEquals(fs1, fs2))
                        {
                            return(false);
                        }
                    }
            }

            return(true);
        }
예제 #2
0
        internal static FileCompareOptions CompareFiles(
            string path1,
            string path2,
            FileCompareOptions options,
            FileAttributes ignoredAttributes = 0,
            TimeSpan?allowedTimeDiff         = null)
        {
            if ((options & FileCompareOptions.ModifiedTime) != 0 &&
                !LastWriteTimeUtcEquals(path1, path2, allowedTimeDiff))
            {
                return(FileCompareOptions.ModifiedTime);
            }

            if ((options & FileCompareOptions.Attributes) != 0 &&
                !AttributeEquals(path1, path2, ignoredAttributes))
            {
                if ((options & (FileCompareOptions.Size | FileCompareOptions.Content)) != 0)
                {
                    using (var fs1 = new FileStream(path1, FileMode.Open, FileAccess.Read))
                        using (var fs2 = new FileStream(path2, FileMode.Open, FileAccess.Read))
                        {
                            if ((options & FileCompareOptions.Size) != 0 &&
                                fs1.Length != fs2.Length)
                            {
                                return(FileCompareOptions.Size);
                            }

                            if ((options & FileCompareOptions.Content) != 0 &&
                                !StreamComparer.Default.ByteEquals(fs1, fs2))
                            {
                                return(FileCompareOptions.Content);
                            }
                        }
                }

                return(FileCompareOptions.Attributes);
            }

            if ((options & (FileCompareOptions.Size | FileCompareOptions.Content)) != 0)
            {
                using (var fs1 = new FileStream(path1, FileMode.Open, FileAccess.Read))
                    using (var fs2 = new FileStream(path2, FileMode.Open, FileAccess.Read))
                    {
                        if ((options & FileCompareOptions.Size) != 0 &&
                            fs1.Length != fs2.Length)
                        {
                            return(FileCompareOptions.Size);
                        }

                        if ((options & FileCompareOptions.Content) != 0 &&
                            !StreamComparer.Default.ByteEquals(fs1, fs2))
                        {
                            return(FileCompareOptions.Content);
                        }
                    }
            }

            return(FileCompareOptions.None);
        }
예제 #3
0
 public CopyOptions(
     ConflictResolution conflictResolution = ConflictResolution.Skip,
     FileCompareOptions compareOptions     = FileCompareOptions.None,
     bool flat = false)
 {
     ConflictResolution = conflictResolution;
     CompareOptions     = compareOptions;
     Flat = flat;
 }