📄 zipstorage.h
字号:
// ZipStorage.h: interface for the CZipStorage class.
//
////////////////////////////////////////////////////////////////////////////////
// Copyright (C) 2000 Tadeusz Dracz.
// For conditions of distribution and use, see copyright notice in ZipArchive.h
////////////////////////////////////////////////////////////////////////////////
#if !defined(AFX_ZIPSTORAGE_H__941824FE_3320_4794_BDE3_BE334ED8984B__INCLUDED_)
#define AFX_ZIPSTORAGE_H__941824FE_3320_4794_BDE3_BE334ED8984B__INCLUDED_
#include "ZipBigFile.h" // Added by ClassView
#include "ZipAutoBuffer.h" // Added by ClassView
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// callback function called when there is a need for a disk change
// calling CZipArchive functions, apart from the static ones, may have unexpected results
// iNumber - disk number needed
// iCode :
// -1 - disk needed for reading
// other codes occurs during writting
// >=0 : number of bytes needed
// -2 - the file with the archive name already exists on the disk
// -3 - the disk is probably write - protected
// -4 - couldn't create a file
// pData - user defined data
// return false to abort operation: the proper exception will be thrown
typedef bool (*ZIPCALLBACKFUN )(int iNumber, int iCode, void* pData);
class CZipStorage
{
public:
void Open(CMemFile& mf, int iMode);
// return the position in the file, taking into account the bytes in the write buffer
DWORD GetPosition();
// flush the data from the read buffer to the disk
void Flush();
// only called by CZipCentralDir when opening an existing archive
void UpdateSpanMode(WORD uLastDisk);
// the preset size of the write buffer
int m_iWriteBufferSize;
// user data to be passed to the callback function
void* m_pCallbackData;
// function used to change disks during writing to the disk spanning archive
void NextDisk(int iNeeded, LPCTSTR lpszFileName = NULL);
void Close(bool bAfterException);
// return the numer of the current disk
int GetCurrentDisk();
void SetCurrentDisk(int iNumber);
// change the disk during extract operations
void ChangeDisk(int iNumber);
// Function name : IsSpanMode
// Description : detect span mode
// Return type : int
// -1 - existing span opened
// 0 - no span
// 1 - new span
int IsSpanMode();
void Open(LPCTSTR szPathName, int iMode, int iVolumeSize);
void Write(void *pBuf, DWORD iSize, bool bAtOnce);
DWORD Read(void* pBuf, DWORD iSize, bool bAtOnce);
CZipBigFile m_internalfile;
CFile* m_pFile;
CZipStorage();
virtual ~CZipStorage();
enum {noSpan, pkzipSpan, tdSpan, suggestedAuto, suggestedTd};
int m_iSpanMode;
ZIPCALLBACKFUN m_pZIPCALLBACKFUN;
static char m_gszExtHeaderSignat[];
// open tdspan: last disk number, create tdspan: volume size
// create pkspan: not used
int m_iTdSpanData;
protected:
// how many bytes left free in the write buffer
DWORD GetFreeInBuffer();
friend class CZipCentralDir;
// numer of bytes available in the write buffer
DWORD m_uBytesInWriteBuffer;
// tdSpan : the total size of the current volume, pkSpan : free space on the current volume
DWORD m_uCurrentVolSize;
// return the number of bytes left on the current volume
DWORD VolumeLeft();
// write data to the internal buffer
void WriteInternalBuffer(char *pBuf, DWORD uSize);
// number of bytes left free in the write buffer
DWORD m_uVolumeFreeInBuffer;
CZipAutoBuffer m_pWriteBuffer;
// return the number of free bytes on the current removable disk
DWORD GetFreeVolumeSpace();
void CallCallback(int iCode, CString szTemp);
// only disk spanning creation: tells how many bytes have been written physically to the current volume
DWORD m_iBytesWritten;
// construct the name of the volume in tdSpan mode
CString GetTdVolumeName(bool bLast, LPCTSTR lpszZipName = NULL);
// change the disk in tdSpan mode
CString ChangeTdRead();
// change the disk in pkSpan mode
CString ChangePkzipRead();
// you can only add a new files to the new disk spanning archive and only extract
// them from the existing one
bool m_bNewSpan;
int m_iCurrentDisk;
bool OpenFile(LPCTSTR lpszName, UINT uFlags, bool bThrow = true);
void ThrowError(int err);
};
#endif // !defined(AFX_ZIPSTORAGE_H__941824FE_3320_4794_BDE3_BE334ED8984B__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -