public CompareFoldersWorker(IEnumerable<IVirtualItem> list1, IEnumerable<IVirtualItem> list2, CompareFoldersOptions options) { this.Options = CompareFoldersOptions.CompareLastWriteTime | CompareFoldersOptions.CompareAttributes; this.FStoredProgress = -1; this.FList1 = list1; this.FList2 = list2; this.Options = options; }
private IList<string> CompareFolders(IEnumerable<IVirtualItem> list1, IEnumerable<IVirtualItem> list2, CompareFoldersOptions options, bool cancellable) { bool flag = (options & CompareFoldersOptions.CompareContent) > 0; int num = 0; this.FTotalSize = 0L; this.FProcessedSize = 0L; this.FStoredProgress = -1; ICollection is2 = list1 as ICollection; List<IVirtualItem> list = new List<IVirtualItem>((is2 != null) ? is2.Count : 0x80); foreach (IVirtualItem item in list1) { if (!(item is IVirtualFolder)) { list.Add(item); if (flag) { this.FTotalSize += Convert.ToInt64(item[3]); } } } ICollection is3 = list2 as ICollection; Dictionary<string, IVirtualItem> dictionary = new Dictionary<string, IVirtualItem>((is3 != null) ? is3.Count : 0x80, StringComparer.OrdinalIgnoreCase); foreach (IVirtualItem item in list2) { if (!(item is IVirtualFolder)) { dictionary.Add(item.Name, item); } } List<string> list3 = new List<string>(Math.Min(list.Count, dictionary.Count)); IComparer defaultInvariant = Comparer.DefaultInvariant; if (flag) { this.OnProgress(); } foreach (IVirtualItem item2 in list) { IVirtualItem item3; if (cancellable) { base.CheckSuspendingPending(); if (base.CancellationPending) { return null; } } bool flag2 = false; if (dictionary.TryGetValue(item2.Name, out item3)) { bool flag3 = string.Equals(item2.Name, item3.Name, StringComparison.OrdinalIgnoreCase); if (flag3) { if ((CompareFoldersOptions.CompareAttributes & options) > 0) { flag3 = defaultInvariant.Compare(item2.Attributes, item3.Attributes) == 0; } if (flag3 && ((options & CompareFoldersOptions.CompareLastWriteTime) > 0)) { bool flag4 = item2.IsPropertyAvailable(8); bool flag5 = item3.IsPropertyAvailable(8); if (flag4 && flag5) { DateTime time = (DateTime) item2[8]; DateTime time2 = (DateTime) item3[8]; TimeSpan span = (TimeSpan) (time - time2); flag3 = Math.Abs(span.Ticks) < 0x989680L; } else { flag3 = flag4 == flag5; } } if (flag3 && ((options & CompareFoldersOptions.CompareSize) > 0)) { flag3 = defaultInvariant.Compare(item2[3], item3[3]) == 0; } if (flag3 && flag) { IChangeVirtualFile file = item2 as IChangeVirtualFile; IChangeVirtualFile file2 = item3 as IChangeVirtualFile; flag3 = (file != null) && (file2 != null); if (flag3) { bool async = (options & CompareFoldersOptions.CompareContentAsync) > 0; if ((options & CompareFoldersOptions.AutoCompareContentAsync) > 0) { IGetVirtualVolume parent = item2.Parent as IGetVirtualVolume; IGetVirtualVolume volume2 = item3.Parent as IGetVirtualVolume; async = ((parent != null) && (volume2 != null)) && ((parent.Location != volume2.Location) || (parent.VolumeType != volume2.VolumeType)); } FileOptions options2 = FileOptions.SequentialScan | (async ? FileOptions.Asynchronous : FileOptions.None); using (Stream stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.Read, options2, 0L)) { using (Stream stream2 = file2.Open(FileMode.Open, FileAccess.Read, FileShare.Read, options2, 0L)) { flag3 = this.StreamsEqual(stream, stream2, 0L, async); flag2 = true; } } } } if (flag3) { list3.Add(item2.Name); } } } if (flag) { if (!flag2) { this.FProcessedSize += (long) item2[3]; } this.OnProgress(); } else { int progressPercent = (++num * 100) / list.Count; if (progressPercent != this.FStoredProgress) { base.RaiseProgressChanged(progressPercent, null); this.FStoredProgress = progressPercent; } } } return list3; }
public IList<string> CompareFolders(IEnumerable<IVirtualItem> list1, IEnumerable<IVirtualItem> list2, CompareFoldersOptions options) { return this.CompareFolders(list1, list2, options, false); }
public CompareFoldersWorker() { this.Options = CompareFoldersOptions.CompareLastWriteTime | CompareFoldersOptions.CompareAttributes; this.FStoredProgress = -1; }
private string Write200_CompareFoldersOptions(CompareFoldersOptions v) { switch (v) { case CompareFoldersOptions.CompareContentAsync: return "CompareContentAsync"; case CompareFoldersOptions.AutoCompareContentAsync: return "AutoCompareContentAsync"; case CompareFoldersOptions.CompareAttributes: return "CompareAttributes"; case CompareFoldersOptions.CompareLastWriteTime: return "CompareLastWriteTime"; case CompareFoldersOptions.CompareSize: return "CompareSize"; case CompareFoldersOptions.CompareContent: return "CompareContent"; } return XmlSerializationWriter.FromEnum((long) v, new string[] { "CompareAttributes", "CompareLastWriteTime", "CompareSize", "CompareContent", "CompareContentAsync", "AutoCompareContentAsync" }, new long[] { 1L, 2L, 4L, 8L, 0x10L, 0x20L }, "Nomad.Workers.CompareFoldersOptions"); }