⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cabheader.h

📁 免费压缩软件7zip的源码
💻 H
字号:
// Archive/Cab/Header.h

#ifndef __ARCHIVE_CAB_HEADER_H
#define __ARCHIVE_CAB_HEADER_H

#include "Common/Types.h"

namespace NArchive {
namespace NCab {
namespace NHeader{

namespace NArchive {
  
  extern UInt32 kSignature;
  
  namespace NFlags
  {
    const int kPrevCabinet = 0x0001;
    const int kNextCabinet = 0x0002;
    const int kReservePresent = 0x0004;
  }

  const UInt32 kArchiveHeaderSize = 36;
  /*
  struct CBlock
  {
    UInt32  Signature;	// cabinet file signature
    UInt32  Reserved1;	// reserved
    UInt32  Size;	// size of this cabinet file in bytes
    UInt32  Reserved2;	// reserved
    UInt32  FileOffset;	// offset of the first CFFILE entry
    UInt32  Reserved3;	// reserved
    Byte  VersionMinor;	// cabinet file format version, minor
    Byte  VersionMajor;	// cabinet file format version, major
    UInt16  NumFolders;	// number of CFFOLDER entries in this cabinet
    UInt16  NumFiles;	// number of CFFILE entries in this cabinet
    UInt16  Flags;	// cabinet file option indicators
    UInt16  SetID;	// must be the same for all cabinets in a set
    UInt16  CabinetNumber;	// number of this cabinet file in a set
  };
  */

  const UInt32 kPerDataSizesHeaderSize = 4;

  struct CPerDataSizes
  {
    UInt16 PerCabinetAreaSize; 	// (optional) size of per-cabinet reserved area
    Byte PerFolderAreaSize; 	// (optional) size of per-folder reserved area
    Byte PerDatablockAreaSize; 	// (optional) size of per-datablock reserved area
  };

    /*
    Byte  abReserve[];	// (optional) per-cabinet reserved area
    Byte  szCabinetPrev[];	// (optional) name of previous cabinet file
    Byte  szDiskPrev[];	// (optional) name of previous disk
    Byte  szCabinetNext[];	// (optional) name of next cabinet file
    Byte  szDiskNext[];	// (optional) name of next disk
    */
}

namespace NCompressionMethodMajor
{
  const Byte kNone = 0;
  const Byte kMSZip = 1;
  const Byte kQuantum = 2;
  const Byte kLZX = 3;
}

const UInt32 kFolderHeaderSize = 8;
struct CFolder
{
  UInt32 DataStart;	// offset of the first CFDATA block in this folder
  UInt16 NumDataBlocks;	// number of CFDATA blocks in this folder
  Byte CompressionTypeMajor;
  Byte CompressionTypeMinor;
  // Byte  abReserve[];	// (optional) per-folder reserved area
  Byte GetCompressionMethod() const { return CompressionTypeMajor & 0xF; }
};

const int kFileNameIsUTFAttributeMask = 0x80;

namespace NFolderIndex
{
  const int kContinuedFromPrev    = 0xFFFD;
  const int kContinuedToNext      = 0xFFFE;
  const int kContinuedPrevAndNext = 0xFFFF;
  inline UInt16 GetRealFolderIndex(UInt16 aNumFolders, UInt16 aFolderIndex)
  {
    switch(aFolderIndex)
    {
      case kContinuedFromPrev:
        return 0;
      case kContinuedToNext:
      case kContinuedPrevAndNext:
        return aNumFolders - 1;
      default:
        return aFolderIndex;
    }
  }
}

const UInt32 kFileHeaderSize = 16;
/*
struct CFile
{
  UInt32  UnPackSize;	// uncompressed size of this file in bytes
  UInt32  UnPackOffset;	// uncompressed offset of this file in the folder
  UInt16  FolderIndex;	// index into the CFFOLDER area
  UInt16  PureDate;
  UInt16  PureTime;	// Time
  UInt16  Attributes;	// attribute flags for this file
  Byte  szName[];	// name of this file
};
*/
}}}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -