示例#1
0
        internal static void CopyHeaders(CompressionLevel compression, ZipArchive package, DataCopier copier, StorageEnvironmentOptions storageEnvironmentOptions, string basePath)
        {
            var success = false;

            foreach (var headerFileName in HeaderAccessor.HeaderFileNames)
            {
                var header = stackalloc FileHeader[1];

                if (!storageEnvironmentOptions.ReadHeader(headerFileName, header))
                {
                    continue;
                }

                success = true;

                var headerPart = package.CreateEntry(Path.Combine(basePath, headerFileName), compression);
                Debug.Assert(headerPart != null);

                using (var headerStream = headerPart.Open())
                {
                    copier.ToStream((byte *)header, sizeof(FileHeader), headerStream);
                }
            }

            if (!success)
            {
                throw new InvalidDataException($"Failed to read both file headers (headers.one & headers.two) from path: {basePath}, possible corruption.");
            }
        }
示例#2
0
        internal static void CopyHeaders(CompressionLevel compression, ZipArchive package, DataCopier copier, StorageEnvironmentOptions storageEnvironmentOptions)
        {
            foreach (var headerFileName in HeaderAccessor.HeaderFileNames)
            {
                var header = stackalloc FileHeader[1];

                if (!storageEnvironmentOptions.ReadHeader(headerFileName, header))
                    continue;

                var headerPart = package.CreateEntry(headerFileName, compression);
                Debug.Assert(headerPart != null);

                using (var headerStream = headerPart.Open())
                {
                    copier.ToStream((byte*)header, sizeof(FileHeader), headerStream);
                }
            }
        }
示例#3
0
        internal static void CopyHeaders(CompressionLevel compression, ZipArchive package, DataCopier copier, StorageEnvironmentOptions storageEnvironmentOptions)
        {
            foreach (var headerFileName in HeaderAccessor.HeaderFileNames)
            {
                var header = stackalloc FileHeader[1];

                if (!storageEnvironmentOptions.ReadHeader(headerFileName, header))
                {
                    continue;
                }

                var headerPart = package.CreateEntry(headerFileName, compression);
                Debug.Assert(headerPart != null);

                using (var headerStream = headerPart.Open())
                {
                    copier.ToStream((byte *)header, sizeof(FileHeader), headerStream, CancellationToken.None);
                }
            }
        }
示例#4
0
        public JournalInfo CopyHeaders(CompressionLevel compressionLevel, ZipArchive package, DataCopier copier, StorageEnvironmentOptions envOptions, string basePath)
        {
            _locker.EnterReadLock(); //race between reading the headers while modifying them
            try
            {
                var header  = stackalloc FileHeader[1];
                var success = false;
                foreach (var headerFileName in HeaderFileNames)
                {
                    if (envOptions.ReadHeader(headerFileName, header) == false)
                    {
                        continue;
                    }

                    success = true;

                    var headerPart = package.CreateEntry(Path.Combine(basePath, headerFileName), compressionLevel);
                    Debug.Assert(headerPart != null);

                    using (var headerStream = headerPart.Open())
                    {
                        copier.ToStream((byte *)header, sizeof(FileHeader), headerStream);
                    }
                }

                if (!success)
                {
                    throw new InvalidDataException($"Failed to read both file headers (headers.one & headers.two) from path: {basePath}, possible corruption.");
                }

                return(_theHeader->Journal);
            }
            finally
            {
                _locker.ExitReadLock();
            }
        }