private MS2File(MS2FileInfoHeader infoHeader, MS2FileHeader header, MS2CryptoMode archiveCryptoMode, MemoryMappedFile dataFile) { this.InfoHeader = infoHeader ?? throw new ArgumentNullException(nameof(infoHeader)); this.Header = header ?? throw new ArgumentNullException(nameof(header)); this.ArchiveCryptoMode = archiveCryptoMode; this.DataMemoryMappedFile = dataFile ?? throw new ArgumentNullException(nameof(dataFile)); this.CompressionType = this.Header.CompressionType; this.IsDataEncrypted = true; }
internal static async Task <MS2File> Load(MS2CryptoMode cryptoMode, Stream headerStream, Stream dataStream, MemoryMappedFile dataMemoryMappedFile) { MS2FileInfoHeader fileInfoHeader = await MS2FileInfoHeader.Load(headerStream).ConfigureAwait(false); MS2FileHeader fileHeader = await MS2FileHeader.Load(cryptoMode, dataStream).ConfigureAwait(false); DLogger.Write($"Id={fileInfoHeader.Id}-{fileHeader.Id}, CompressionId={fileHeader.CompressionType}, RootFolder={fileInfoHeader.RootFolderId}, Name={fileInfoHeader.Name}, Size={FileEx.FormatStorage(fileHeader.EncodedSize)}->{FileEx.FormatStorage(fileHeader.CompressedSize)}->{FileEx.FormatStorage(fileHeader.Size)}"); var file = new MS2File(fileInfoHeader, fileHeader, cryptoMode, dataMemoryMappedFile); return(file); }
private MS2File(MS2FileInfoHeader infoHeader, CompressionType compressionType, MS2CryptoMode archiveCryptoMode, Stream dataStream) { if (!dataStream.CanSeek) { throw new ArgumentException("Stream must be seekable.", nameof(dataStream)); } this.InfoHeader = infoHeader ?? throw new ArgumentNullException(nameof(infoHeader)); this.ArchiveCryptoMode = archiveCryptoMode; this.DataStream = dataStream ?? throw new ArgumentNullException(nameof(dataStream)); this.CompressionType = compressionType; this.IsDataEncrypted = false; }
public static MS2File Create(uint id, string pathInArchive, CompressionType compressionType, MS2CryptoMode archiveCryptoMode, Stream dataStream) => new MS2File(MS2FileInfoHeader.Create(id.ToString(), pathInArchive), compressionType, archiveCryptoMode, dataStream);