STDMETHODIMP P7ZipArchiveUpdateCallback::GetStream(UInt32 index, ISequentialInStream **inStream) { RINOK(Finilize()); const CDirItem &dirItem = (*DirItems)[index]; GetStream2(dirItem.Name); if (dirItem.isDir()) return S_OK; { CInFileStream *inStreamSpec = new CInFileStream; CMyComPtr<ISequentialInStream> inStreamLoc(inStreamSpec); UString path = DirPrefix + dirItem.FullPath; if (!inStreamSpec->Open(path)) { DWORD sysError = ::GetLastError(); FailedCodes.Add(sysError); FailedFiles.Add(path); // if (systemError == ERROR_SHARING_VIOLATION) { PrintNewLine(); PrintError("WARNING: can't open file"); // PrintString(NError::MyFormatMessageW(systemError)); return S_FALSE; } // return sysError; } *inStream = inStreamLoc.Detach(); } return S_OK; }
STDMETHODIMP CArchiveOpener::GetStream(const wchar_t *name, IInStream **inStream) { m_pArchive->SetPartSize(0); // tell that this is multipart QString Path = m_pArchive->GetNextPart(QString::fromStdWString(name)); if(QFile::exists(Path)) { CMyComPtr<IInStream> inStreamLoc(new CArchiveIO(new QFile(Path), QIODevice::ReadOnly)); *inStream = inStreamLoc.Detach(); return S_OK; } return S_FALSE; }
void CStreamBinder::CreateStreams(ISequentialInStream **inStream, ISequentialOutStream **outStream) { _waitWrite = true; _bufSize = 0; _buf = NULL; ProcessedSize = 0; CBinderInStream *inStreamSpec = new CBinderInStream(this); CMyComPtr<ISequentialInStream> inStreamLoc(inStreamSpec); *inStream = inStreamLoc.Detach(); CBinderOutStream *outStreamSpec = new CBinderOutStream(this); CMyComPtr<ISequentialOutStream> outStreamLoc(outStreamSpec); *outStream = outStreamLoc.Detach(); }