ChangeDetector.DetectorUtilitiesFS.DoFsSnapshot C# (CSharp) Méthode

DoFsSnapshot() private static méthode

Internal method to recursively iterate the file system. It will fill out the results parameter with items as it finds them.
private static DoFsSnapshot ( Alphaleonis.Win32.Filesystem.DirectoryInfo baseDirectory, Alphaleonis.Win32.Filesystem.DirectoryInfo currentDirectory, LinkedList results ) : void
baseDirectory Alphaleonis.Win32.Filesystem.DirectoryInfo Base directory is used to make relative paths. It should always end with a '\' (slash) to generate a uniform and valid output.
currentDirectory Alphaleonis.Win32.Filesystem.DirectoryInfo The directory to iterate.
results LinkedList The results LinkedList to fill out.
Résultat void
        private static void DoFsSnapshot(DirectoryInfo baseDirectory, DirectoryInfo currentDirectory, LinkedList<SnapshotFilesystemItem> results)
        {
            // Self
            SnapshotDirectoryInfo current = new SnapshotDirectoryInfo();
            current.RelativePath = currentDirectory.FullName.Substring(baseDirectory.FullName.Length);

            try
            {
                current.LastAccess = currentDirectory.LastAccessTimeUtc;
                current.LastModified = currentDirectory.LastWriteTimeUtc;
                current.Attributes = (System.IO.FileAttributes)currentDirectory.Attributes;

                current.WasReadable = true;
            }
            catch (System.IO.IOException)
            {
                // Couldn't read details
                current.WasReadable = false;
            }

            // Subfiles
            try
            {
                FileInfo[] files = currentDirectory.GetFiles();

                foreach (FileInfo fileInfo in files)
                {
                    // Single file
                    SnapshotFileInfo file = new SnapshotFileInfo();
                    file.RelativePath = fileInfo.FullName.Substring(baseDirectory.FullName.Length);

                    try
                    {
                        file.LastAccess = fileInfo.LastAccessTimeUtc;
                        file.LastModified = fileInfo.LastWriteTimeUtc;
                        file.Attributes = (System.IO.FileAttributes)fileInfo.Attributes;

                        // Make hash
                        using (System.IO.FileStream fileStream = fileInfo.OpenRead())
                        {
                            byte[] hash = _md5.ComputeHash(fileStream);
                            file.Hash = BitConverter.ToString(hash).Replace("-", "");
                        }

                        file.WasReadable = true;
                    }
                    catch (Exception)
                    {
                        // Couldn't read details
                        file.WasReadable = false;
                    }

                    results.AddLast(file);
                }
            }
            catch (System.IO.IOException)
            {
                // Couldn't read files
                current.WasReadable = false;
            }
            catch (UnauthorizedAccessException)
            {
                // Couldn't read files
                current.WasReadable = false;
            }

            // Subdirs
            try
            {
                DirectoryInfo[] directories = currentDirectory.GetDirectories();

                foreach (DirectoryInfo directoryInfo in directories)
                {
                    DoFsSnapshot(baseDirectory, directoryInfo, results);
                }
            }
            catch (System.IO.IOException)
            {
                // Couldn't read directories
                current.WasReadable = false;
            }
            catch (UnauthorizedAccessException)
            {
                // Couldn't read files
                current.WasReadable = false;
            }

            results.AddLast(current);
        }