System.IO.Compression.ZipLocalFileHeader.TrySkipBlock C# (CSharp) Метод

TrySkipBlock() статический публичный Метод

static public TrySkipBlock ( BinaryReader reader ) : bool
reader BinaryReader
Результат bool
        static public bool TrySkipBlock(BinaryReader reader)
        {
            const int OffsetToFilenameLength = 22; //from the point after the signature

            if (reader.ReadUInt32() != SignatureConstant)
                return false;


            if (reader.BaseStream.Length < reader.BaseStream.Position + OffsetToFilenameLength)
                return false;

            reader.BaseStream.Seek(OffsetToFilenameLength, SeekOrigin.Current);

            ushort filenameLength = reader.ReadUInt16();
            ushort extraFieldLength = reader.ReadUInt16();

            if (reader.BaseStream.Length < reader.BaseStream.Position + filenameLength + extraFieldLength)
                return false;

            reader.BaseStream.Seek(filenameLength + extraFieldLength, SeekOrigin.Current);

            return true;
        }
    }

Usage Example

Пример #1
0
 private bool IsOpenable(bool needToUncompress, bool needToLoadIntoMemory, out string message)
 {
     message = null;
     if (this._originallyInArchive)
     {
         if (needToUncompress && this.CompressionMethod != ZipArchiveEntry.CompressionMethodValues.Stored && this.CompressionMethod != ZipArchiveEntry.CompressionMethodValues.Deflate)
         {
             message = Messages.UnsupportedCompression;
             return(false);
         }
         if ((long)this._diskNumberStart != (ulong)this._archive.NumberOfThisDisk)
         {
             message = Messages.SplitSpanned;
             return(false);
         }
         if (this._offsetOfLocalHeader > this._archive.ArchiveStream.Length)
         {
             message = Messages.LocalFileHeaderCorrupt;
             return(false);
         }
         this._archive.ArchiveStream.Seek(this._offsetOfLocalHeader, SeekOrigin.Begin);
         if (!ZipLocalFileHeader.TrySkipBlock(this._archive.ArchiveReader))
         {
             message = Messages.LocalFileHeaderCorrupt;
             return(false);
         }
         if (this.OffsetOfCompressedData + this._compressedSize > this._archive.ArchiveStream.Length)
         {
             message = Messages.LocalFileHeaderCorrupt;
             return(false);
         }
         if (needToLoadIntoMemory && this._compressedSize > (long)2147483647)
         {
             message = Messages.EntryTooLarge;
             return(false);
         }
     }
     return(true);
 }
All Usage Examples Of System.IO.Compression.ZipLocalFileHeader::TrySkipBlock