Пример #1
0
        private async Task AddAllFilesToArchive(ZipArchive archive, string directoryFullPath, IProgress <uint> progressReport)
        {
            var subDirectories = new List <string>(Directory.EnumerateDirectories(directoryFullPath));

            for (int i = 0; i < subDirectories.Count; i++)
            {
                await AddAllFilesToArchive(archive, subDirectories[i], null).ConfigureAwait(false);

                progressReport?.Report(ProgressHelper.ComputeProgressPercentage((uint)i, (uint)subDirectories.Count + 1));
            }

            foreach (var file in Directory.EnumerateFiles(directoryFullPath))
            {
                if (IsDatabaseLock(file))
                {
                    continue;
                }

                string entryPath = CreateRelativePath(file);
                var    entry     = archive.CreateEntry(entryPath, CompressionLevel.Optimal);

                using (var entryStream = entry.Open())
                {
                    using (var fileStream = File.OpenRead(file))
                        await fileStream.CopyToAsync(entryStream).ConfigureAwait(false);
                }
            }

            progressReport?.Report(100);
        }
Пример #2
0
        public async Task ExecuteAsync(IProgress <uint> progressReport)
        {
            for (int i = 0; i < _backupFile.Entries.Count; i++)
            {
                var entry = _backupFile.Entries[i];

                if (IsCanary(entry.Name))
                {
                    continue;
                }

                string entryFullPath = Path.Combine(_targetDirectory, entry.FullName);
                EnsureFileCanBeWritten(entryFullPath);

                using (var fileStream = File.Open(entryFullPath, FileMode.Create, FileAccess.Write, FileShare.None))
                {
                    using (var entryStream = entry.Open())
                        await entryStream.CopyToAsync(fileStream);
                }

                if (i % PROGRES_REPORT_FILE_COUNT == 0 || i == _backupFile.Entries.Count)
                {
                    progressReport?.Report(ProgressHelper.ComputeProgressPercentage((uint)i, (uint)_backupFile.Entries.Count));
                }
            }
        }