Beispiel #1
0
        public async Task CreateAsync(string inputPath, string outputPath)
        {
            await using var outputStream = ArchiveStream.Create(outputPath);

            var metadata         = new Metadata.Metadata(inputPath);
            var directoryHeaders = await metadata.GenerateDirectoryHeadersAsync();

            var fileHeaders = await metadata.GenerateFileHeadersAsync();

            var archiveInfo = new ArchiveInfo()
            {
                Header              = ArchiveResource.ArchiveHeader,
                IsEncrypted         = Compressor.Settings.IsEncryptEnable,
                NumberOfDirectories = directoryHeaders.Count,
                NumberOfFiles       = fileHeaders.Count,
            };

            archiveInfo.DirectoriesBlockPosition = archiveInfo.SizeOf;
            outputStream.Seek(archiveInfo.SizeOf, SeekOrigin.Current);

            await outputStream.WriteDirectoriesAsync(directoryHeaders);

            archiveInfo.FilesBlockPosition = outputStream.Position;

            await outputStream.WriteArchiveInfoAsync(archiveInfo);

            outputStream.Position = archiveInfo.FilesBlockPosition;

            await Compressor.CompressAsync(fileHeaders, outputStream);
        }