virtual void operator()() override { // u2::String szStr = "abcdefghijklmnopqrstuv"; // size_t uCurCount = 0; // while (uCurCount < szStr.size()) // { // uCurCount += m_pOutStream->write((const u2byte*)szStr.c_str() + uCurCount, szStr.size()); // } // // int a = 0; FileInStream* pFileIn = U2_NEW FileInStream("aaa", "D://messagebox.zip", std::ios_base::in | std::ios_base::binary); const size_t BUF_SIZE = 1000; u2char s[BUF_SIZE] = {0}; size_t uTotal = 0; while (!pFileIn->eof()) { size_t uReadCount = pFileIn->read(s, BUF_SIZE); size_t uWriteCount = 0; while (uWriteCount < uReadCount) { uWriteCount += m_pOutStream->write(s + uWriteCount, uReadCount - uWriteCount); } uTotal += uWriteCount; } pFileIn->close(); m_pOutStream->close(); }
/** process external entity (local file only) */ void ExpatInStream::procExtEntity(const char *fname, const char *szctxt) { // XML_Parser expar = XML_ExternalEntityParserCreate(m_parser, szctxt, NULL); XML_Parser expar = XML_ExternalEntityParserCreate(m_parser, szctxt, "UTF-8"); try { FileInStream fis; fis.open(fname); char buf[bufsize]; bool done=false; do { int len = fis.read(buf, 0, sizeof(buf)); done = len < sizeof(buf); if (XML_Parse(expar, buf, len, done) == XML_STATUS_ERROR) { LString msg = LString::format("%s at line %d\n", XML_ErrorString(XML_GetErrorCode(expar)), XML_GetCurrentLineNumber(expar)); MB_THROW(qlib::IOException, msg); } else if (getError()) { MB_THROW(qlib::IOException, getErrorMsg()); } } while (!done); } catch (...) { XML_ParserFree(expar); throw; } XML_ParserFree(expar); }