Пример #1
0
	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();
	}
Пример #2
0
/**
   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);
}