예제 #1
0
        public void Save(Stream output, IList <IArchiveFileInfo> files)
        {
            // Prepare stream
            var archiveOffset = GetArchiveOffset(_header.type);
            var archiveSize   = files[0].FileSize;

            var hfsLength = HfsStream.GetBaseLength(archiveSize);

            output.SetLength(archiveOffset + hfsLength);

            using var bw = new BinaryWriterX(output, ByteOrder.BigEndian);

            // Write HFS content
            var hfsStream = new HfsStream(new SubStream(output, archiveOffset, hfsLength));

            (files[0] as ArchiveFileInfo).SaveFileData(hfsStream);

            hfsStream.Flush();

            // Write header
            _header.fileSize = (int)archiveSize;

            bw.BaseStream.Position = 0;
            bw.WriteType(_header);
        }
예제 #2
0
        // Method based on MtArc.LoadBigEndian
        public IList <IArchiveFileInfo> Load(Stream input, string fileName)
        {
            using var br = new BinaryReaderX(input, true, ByteOrder.BigEndian);

            // Read HFS header
            _header = br.ReadType <HfsHeader>();

            // Prepare stream
            var arcOffset = GetArchiveOffset(_header.type);
            var hfsStream = new HfsStream(new SubStream(input, arcOffset, input.Length - arcOffset));

            // Read HFS content
            return(new List <IArchiveFileInfo> {
                new ArchiveFileInfo(hfsStream, Path.GetFileNameWithoutExtension(fileName) + ".unhfs" + Path.GetExtension(fileName))
            });
        }