void BinaryFileTestCase::testSeek() { tstring str = TestHelper::getTestDataPath(_T("BinaryFileTestSeek"), false); BinaryFile fileWriter; fileWriter.open(str, BinaryFile::CREATE); CPPUNIT_ASSERT( fileWriter.isFileOpen() ); int32_t nData; for(size_t i = 0; i < 1000; ++i) { nData = (int32_t)i; fileWriter.write(&nData, sizeof(int32_t)); } fileWriter.close(); BinaryFile fileReader; fileReader.open(str, BinaryFile::READ); CPPUNIT_ASSERT( fileReader.isFileOpen() ); CPPUNIT_ASSERT((int64_t)1000 * sizeof(int32_t) == fileReader.getLength()); CPPUNIT_ASSERT_EQUAL((int64_t)0, fileReader.getPos()); fileReader.seek(10); CPPUNIT_ASSERT_EQUAL((int64_t)10, fileReader.getPos()); fileReader.close(); //Remove file File f(str); f.remove(); }
void index(const tstring& sDir) { IndexWriterPtr pIndexWriter = m_pIndex->acquireWriter(); DirectoryIterator di(sDir, false); while(di.hasNext()) { const File& f = di.next(); if(f.isFile()) { BinaryFile bf; bf.open(f.getPath().c_str(), BinaryFile::READ); if(bf.isFileOpen()) { size_t nRead = (size_t)bf.getLength(); if (nRead > 0) { DocumentPtr pDoc = new Document(pIndexWriter->getDocSchema()); pDoc->addField(0, f.getPath().c_str()); char* buf = new char[nRead + 1]; bf.read(buf, nRead); buf[nRead] = 0; pDoc->addField(1, buf, nRead, false); delete[] buf; pIndexWriter->addDocument(pDoc); } } } } docPool.commit(); pIndexWriter->close(); }
void BinaryFileTestCase::testLargeFileSeekAndRead() { #ifdef TEST_LARGE_FILE tstring str = TestHelper::getTestDataPath(_T("BinaryFileTestLargeFile"), false); BinaryFile bf; bf.open(str.c_str(), BinaryFile::READ); CPPUNIT_ASSERT( bf.isFileOpen() ); int64_t nPos = 1000000000;//1 GB nPos <<= 4;//16 GB int64_t nData = 123456789; bf.seek(nPos); bf.read(&nData,sizeof(int64_t)); CPPUNIT_ASSERT_EQUAL(nData,(int64_t)123456789); #endif }
void BinaryFileTestCase::testRead() { tstring str = TestHelper::getTestDataPath(_T("BinaryFileTestWriteFile"), false); BinaryFile bf; bf.open(str.c_str(),BinaryFile::READ); CPPUNIT_ASSERT( bf.isFileOpen() ); int32_t nData; for(size_t i = 0; i < 10000;i += 1000) { bf.seek(i); bf.read(&nData,sizeof(int32_t)); CPPUNIT_ASSERT_EQUAL(nData,(int32_t)i); } bf.close(); }
void BinaryFileTestCase::testLargeFileWrite() { #ifdef TEST_LARGE_FILE BinaryFile bf; tstring str = TestHelper::getTestDataPath(_T("BinaryFileTestLargeFile"), false); bf.open(str.c_str(),BinaryFile::CRTR); CPPUNIT_ASSERT( bf.isFileOpen() ); int64_t nPos = 1000000000;//1 GB nPos <<= 4;//16 GB bf.seek(nPos); int64_t nData = 123456789; bf.write(&nData,sizeof(int64_t)); bf.close(); #endif }