System.IO.Compression.ZipArchiveEntry.IsOpenable C# (CSharp) Method

IsOpenable() private method

private IsOpenable ( bool needToUncompress, bool needToLoadIntoMemory, string &message ) : bool
needToUncompress bool
needToLoadIntoMemory bool
message string
return bool
        private bool IsOpenable(bool needToUncompress, bool needToLoadIntoMemory, out string message)
        {
            message = null;

            if (_originallyInArchive)
            {
                if (needToUncompress)
                {
                    if (CompressionMethod != CompressionMethodValues.Stored &&
                        CompressionMethod != CompressionMethodValues.Deflate &&
                        CompressionMethod != CompressionMethodValues.Deflate64)
                    {
                        switch (CompressionMethod)
                        {
                            case CompressionMethodValues.BZip2:
                            case CompressionMethodValues.LZMA:
                                message = SR.Format(SR.UnsupportedCompressionMethod, CompressionMethod.ToString());
                                break;
                            default:
                                message = SR.UnsupportedCompression;
                                break;
                        }
                        return false;
                    }
                }
                if (_diskNumberStart != _archive.NumberOfThisDisk)
                {
                    message = SR.SplitSpanned;
                    return false;
                }
                if (_offsetOfLocalHeader > _archive.ArchiveStream.Length)
                {
                    message = SR.LocalFileHeaderCorrupt;
                    return false;
                }
                _archive.ArchiveStream.Seek(_offsetOfLocalHeader, SeekOrigin.Begin);
                if (!ZipLocalFileHeader.TrySkipBlock(_archive.ArchiveReader))
                {
                    message = SR.LocalFileHeaderCorrupt;
                    return false;
                }
                //when this property gets called, some duplicated work
                if (OffsetOfCompressedData + _compressedSize > _archive.ArchiveStream.Length)
                {
                    message = SR.LocalFileHeaderCorrupt;
                    return false;
                }
                //This limitation originally existed because a) it is unreasonable to load > 4GB into memory
                //but also because the stream reading functions make it hard.  This has been updated to handle
                //this scenario in a 64-bit process using multiple buffers, delivered first as an OOB for
                //compatibility.
                if (needToLoadIntoMemory)
                {
                    if (_compressedSize > int.MaxValue)
                    {
                        if (!s_allowLargeZipArchiveEntriesInUpdateMode)
                        {
                            message = SR.EntryTooLarge;
                            return false;
                        }
                    }
                }
            }

            return true;
        }