private void OnUpdate(DoWorkEventArgs e) { // Clean: foreach (string file in _values.Keys) { if (!File.Exists(file)) { _values.Remove(file); } } // Indexing int i = 0; FileInfo[] files = _enumerator.ToArray(); foreach (FileInfo file in _enumerator) { if (CancellationPending) { e.Cancel = true; return; } i++; try { if (file.Exists) { var keyWrapper = new FileKeyWrapper(file.FullName, _keyGenerator); if (_values.ContainsKey(file.FullName)) { FileKeyWrapper cached = _values[file.FullName]; if (cached.Size != file.Length || cached.LastWriteUtc != file.LastWriteTimeUtc) { _values[file.FullName] = keyWrapper; ReportProgress((i * 100) / files.Length, keyWrapper.Hash); } } else { _values.Add(file.FullName, keyWrapper); ReportProgress((i * 100) / files.Length, keyWrapper.Hash); } } } catch (FileNotFoundException) { if (_values.ContainsKey(file.FullName)) { _values.Remove(file.FullName); } } } }
private static bool IsValid(FileKeyWrapper key, string path) { if (File.Exists(path)) { if (key.LastWriteUtc == File.GetLastWriteTimeUtc(path)) { return(true); } } return(false); }
private bool Equals(FileKeyWrapper other) { return(Equals(Size, other.Size) && string.Equals(Hash, other.Hash)); }