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); }
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); }
public CopyOptions( ConflictResolution conflictResolution = ConflictResolution.Skip, FileCompareOptions compareOptions = FileCompareOptions.None, bool flat = false) { ConflictResolution = conflictResolution; CompareOptions = compareOptions; Flat = flat; }