izipfile.cpp

来自「这是一个兼容C++标准的IO流接口」· C++ 代码 · 共 116 行

CPP
116
字号
//------------------------------------------------------------------------------
// (c) 2001 Gottfried Chen
//------------------------------------------------------------------------------

#include "izipfile.h"

namespace zip
{

//------------------------------------------------------------------------------
izipfile::izipfile(const char* fileName) :
//------------------------------------------------------------------------------
mHandle(0),
mFileInZipIsOpen(false)
{
    mHandle = unzOpen(fileName);
}

//------------------------------------------------------------------------------
bool izipfile::isOk() const
//------------------------------------------------------------------------------
{
    return mHandle != 0;
}

//------------------------------------------------------------------------------
izipfile::~izipfile()
//------------------------------------------------------------------------------
{
    close();
}

//------------------------------------------------------------------------------
bool izipfile::close()
//------------------------------------------------------------------------------
{
    bool ret = false;
    closeInZip();
    if (isOk())
    {
        ret = unzClose(mHandle) == UNZ_OK;
        mHandle = 0;
    }

    return ret;
}

//------------------------------------------------------------------------------
bool izipfile::fileInZipIsOpen() const
//------------------------------------------------------------------------------
{
    return mFileInZipIsOpen;
}

//------------------------------------------------------------------------------
bool izipfile::openInZip(const char* fileName)
//------------------------------------------------------------------------------
{
    bool ret = false;
    if (isOk() &&
        !fileInZipIsOpen() &&
        unzLocateFile(mHandle, fileName, 0) == UNZ_OK &&
        unzOpenCurrentFile(mHandle) == UNZ_OK)
    {
        mFileInZipIsOpen = true;
        ret = true;
    }

    return ret;
}

//------------------------------------------------------------------------------
bool izipfile::closeInZip()
//------------------------------------------------------------------------------
{
    bool ret = false;
    if (mFileInZipIsOpen)
    {
        mFileInZipIsOpen = false;
        ret = unzCloseCurrentFile(mHandle) == UNZ_OK;
    }

    return ret;
}

//------------------------------------------------------------------------------
int izipfile::read(void* buffer, unsigned int size)
//------------------------------------------------------------------------------
{
    if (fileInZipIsOpen())
        return unzReadCurrentFile(mHandle, buffer, size);
    else
        return -1;
}

//------------------------------------------------------------------------------
izipfile::izipfile(izipfile& rhs)
//------------------------------------------------------------------------------
{
    *this = rhs;
}

//------------------------------------------------------------------------------
izipfile& izipfile::operator=(izipfile& rhs)
//------------------------------------------------------------------------------
{
    mHandle = rhs.mHandle;
    mFileInZipIsOpen = rhs.mFileInZipIsOpen;

    rhs.mHandle = 0;
    rhs.mFileInZipIsOpen = false;

    return *this;
}

} // namespace zip

⌨️ 快捷键说明

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