rarvolumeinstream.cpp
来自「由7-zip提供的压缩、解压缩程序」· C++ 代码 · 共 80 行
CPP
80 行
// RarVolumeInStream.cpp#include "StdAfx.h"#include "RarVolumeInStream.h"#include "Windows/Defs.h"#include "Common/Defs.h"namespace NArchive {namespace NRar {void CFolderInStream::Init( CObjectVector<CInArchive> *archives, const CObjectVector<CItemEx> *items, const CRefItem &refItem){ _archives = archives; _items = items; _refItem = refItem; _curIndex = 0; CRCs.Clear(); _fileIsOpen = false;}HRESULT CFolderInStream::OpenStream(){ while (_curIndex < _refItem.NumItems) { const CItemEx &item = (*_items)[_refItem.ItemIndex + _curIndex]; _stream.Attach((*_archives)[_refItem.VolumeIndex + _curIndex]. CreateLimitedStream(item.GetDataPosition(), item.PackSize)); _curIndex++; _fileIsOpen = true; _crc.Init(); return S_OK; } return S_OK;}HRESULT CFolderInStream::CloseStream(){ CRCs.Add(_crc.GetDigest()); _stream.Release(); _fileIsOpen = false; return S_OK;}STDMETHODIMP CFolderInStream::Read(void *data, UInt32 size, UInt32 *processedSize){ UInt32 realProcessedSize = 0; while ((_curIndex < _refItem.NumItems || _fileIsOpen) && size > 0) { if (_fileIsOpen) { UInt32 localProcessedSize; RINOK(_stream->Read( ((Byte *)data) + realProcessedSize, size, &localProcessedSize)); _crc.Update(((Byte *)data) + realProcessedSize, localProcessedSize); if (localProcessedSize == 0) { RINOK(CloseStream()); continue; } realProcessedSize += localProcessedSize; size -= localProcessedSize; break; } else { RINOK(OpenStream()); } } if (processedSize != 0) *processedSize = realProcessedSize; return S_OK;}}}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?