コード例 #1
0
        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);
                    }
                }
            }
        }
コード例 #2
0
 private static bool IsValid(FileKeyWrapper key, string path)
 {
     if (File.Exists(path))
     {
         if (key.LastWriteUtc == File.GetLastWriteTimeUtc(path))
         {
             return(true);
         }
     }
     return(false);
 }
コード例 #3
0
 private bool Equals(FileKeyWrapper other)
 {
     return(Equals(Size, other.Size) && string.Equals(Hash, other.Hash));
 }