Пример #1
0
        private static void ProcessFile(TextWriter stdout, SQLiteConnection connection, List <StorageFile> files, Volume volume, FileInfo file, string dirPath)
        {
            try {
                stdout.Write("[" + volume.Label + "] Checking file: " + dirPath + "/" + file.Name + ", " + string.Format("{0:n0}", file.Length) + " bytes...");
                byte[] shorthash;
                using (var fs = new FileStream(file.FullName, FileMode.Open, FileAccess.Read)) {
                    shorthash = HashUtil.CalculateShortHash(fs);
                }
                StorageFile sf = CheckAndUpdateFile(connection, volume, file, dirPath, shorthash);
                if (sf != null)
                {
                    stdout.WriteLine(" seems same.");
                    files.Add(sf);
                    return;
                }
                stdout.WriteLine(" is different or new.");

                long   filesize;
                byte[] hash;
                using (var fs = new FileStream(file.FullName, FileMode.Open, FileAccess.Read)) {
                    filesize  = fs.Length;
                    shorthash = HashUtil.CalculateShortHash(fs);
                    hash      = HashUtil.CalculateHash(fs);
                }
                files.Add(InsertOrUpdateFileAndStorage(connection, volume, dirPath, file.Name, filesize, hash, shorthash, file.LastWriteTimeUtc));
            } catch (UnauthorizedAccessException ex) {
                stdout.WriteLine(ex.ToString());
            }
        }
        public static FileIdentity IdentifyFile(string path)
        {
            long filesize;

            byte[] shorthash;
            byte[] hash;
            using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read)) {
                filesize  = fs.Length;
                shorthash = HashUtil.CalculateShortHash(fs);
                hash      = HashUtil.CalculateHash(fs);
            }
            return(new FileIdentity(filesize, shorthash, hash));
        }