コード例 #1
0
ファイル: ZipEntry.cs プロジェクト: migueldeicaza/LibZipSharp
        public IList <ExtraField> GetExtraField(ushort fieldID, ZipHeaderLocation location = ZipHeaderLocation.Any, bool required = false)
        {
            OperationFlags flags = OperationFlags.None;

            if (!TranslateLocation(location, out flags))
            {
                return(null);
            }
            var ret = new List <ExtraField> ();

            if (flags == OperationFlags.None)
            {
                GatherExtraFields(GetFieldCount(fieldID, location, OperationFlags.Local), fieldID, OperationFlags.Local, ret, required);
                if (location == ZipHeaderLocation.Any && ret.Count > 0)
                {
                    return(ret);
                }
                GatherExtraFields(GetFieldCount(fieldID, location, OperationFlags.Central), fieldID, OperationFlags.Central, ret, required);
            }
            else
            {
                GatherExtraFields(GetFieldCount(fieldID, location, flags), fieldID, flags, ret, required);
            }

            return(ret.Count > 0 ? ret : null);
        }
コード例 #2
0
ファイル: ZipEntry.cs プロジェクト: migueldeicaza/LibZipSharp
        bool TranslateLocation(ZipHeaderLocation location, out OperationFlags flags)
        {
            flags = OperationFlags.None;
            switch (location)
            {
            case ZipHeaderLocation.Both:
            case ZipHeaderLocation.Any:
                if (localExtraFieldsCount <= 0 && centralExtraFieldsCount <= 0)
                {
                    return(false);
                }
                // Don't set any flags here, native api errors out if it has both central and local flags set
                break;

            case ZipHeaderLocation.Central:
                if (centralExtraFieldsCount <= 0)
                {
                    return(false);
                }
                flags = OperationFlags.Central;
                break;

            case ZipHeaderLocation.Local:
                if (localExtraFieldsCount <= 0)
                {
                    return(false);
                }
                flags = OperationFlags.Local;
                break;
            }

            return(true);
        }
コード例 #3
0
ファイル: ZipEntry.cs プロジェクト: migueldeicaza/LibZipSharp
        ushort GetFieldCount(ushort fieldID, ZipHeaderLocation location, OperationFlags flags)
        {
            short count = Native.zip_file_extra_fields_count_by_id(archive.ArchivePointer, Index, fieldID, flags);

            if (count < 0)
            {
                count = 0;
            }
            return((ushort)count);
        }
コード例 #4
0
ファイル: ZipEntry.cs プロジェクト: migueldeicaza/LibZipSharp
        public bool ExtraFieldPresent(ushort fieldID, ZipHeaderLocation location = ZipHeaderLocation.Any)
        {
            OperationFlags flags = OperationFlags.None;

            if (!TranslateLocation(location, out flags))
            {
                return(false);
            }

            if (flags != OperationFlags.Central && GetFieldCount(fieldID, location, OperationFlags.Local) > 0)
            {
                return(true);
            }
            return(GetFieldCount(fieldID, location, OperationFlags.Central) > 0);
        }