private bool WriteLocalFileHeader(bool isEmptyFile)
{
uint num;
uint num1;
ushort num2;
ushort totalSize;
ushort num3;
object obj;
BinaryWriter binaryWriter = new BinaryWriter(this._archive.ArchiveStream);
Zip64ExtraField nullable = new Zip64ExtraField();
bool flag = false;
if (isEmptyFile)
{
this.CompressionMethod = ZipArchiveEntry.CompressionMethodValues.Stored;
num = 0;
num1 = 0;
}
else if (this._archive.Mode == ZipArchiveMode.Create && !this._archive.ArchiveStream.CanSeek && !isEmptyFile)
{
this._generalPurposeBitFlag |= ZipArchiveEntry.BitFlagValues.DataDescriptor;
flag = false;
num = 0;
num1 = 0;
}
else if (!this.SizesTooLarge())
{
flag = false;
num = (uint)this._compressedSize;
num1 = (uint)this._uncompressedSize;
}
else
{
flag = true;
num = -1;
num1 = -1;
nullable.CompressedSize = new long?(this._compressedSize);
nullable.UncompressedSize = new long?(this._uncompressedSize);
this.VersionToExtractAtLeast(ZipVersionNeededValues.Zip64);
}
this._offsetOfLocalHeader = binaryWriter.BaseStream.Position;
if (flag)
{
totalSize = nullable.TotalSize;
}
else
{
totalSize = 0;
}
if (this._lhUnknownExtraFields != null)
{
num3 = (ushort)ZipGenericExtraField.TotalSize(this._lhUnknownExtraFields);
}
else
{
num3 = 0;
}
int num4 = totalSize + num3;
if (num4 <= 65535)
{
num2 = (ushort)num4;
}
else
{
if (flag)
{
obj = nullable.TotalSize;
}
else
{
obj = null;
}
num2 = (ushort)obj;
this._lhUnknownExtraFields = null;
}
binaryWriter.Write((uint)67324752);
binaryWriter.Write((ushort)this._versionToExtract);
binaryWriter.Write((ushort)this._generalPurposeBitFlag);
binaryWriter.Write((ushort)this.CompressionMethod);
binaryWriter.Write(ZipHelper.DateTimeToDosTime(this._lastModified.DateTime));
binaryWriter.Write(this._crc32);
binaryWriter.Write(num);
binaryWriter.Write(num1);
binaryWriter.Write((ushort)((int)this._storedEntryNameBytes.Length));
binaryWriter.Write(num2);
binaryWriter.Write(this._storedEntryNameBytes);
if (flag)
{
nullable.WriteBlock(this._archive.ArchiveStream);
}
if (this._lhUnknownExtraFields != null)
{
ZipGenericExtraField.WriteAllBlocks(this._lhUnknownExtraFields, this._archive.ArchiveStream);
}
return(flag);
}