本文整理汇总了C++中CFileBasic类的典型用法代码示例。如果您正苦于以下问题:C++ CFileBasic类的具体用法?C++ CFileBasic怎么用?C++ CFileBasic使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了CFileBasic类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: LoadTGA
BOOL LoadTGA(CImage* pcImage, char* szFilename)
{
static char uTGAcompare[12] = {0,0, 2,0,0,0,0,0,0,0,0,0}; // Uncompressed True Colour TGA Header
//static char cTGAcompare[12] = {0,0,10,0,0,0,0,0,0,0,0,0}; // Compressed True Colour TGA Header
STGAFileHeader tgaheader;
CFileBasic sFile;
//----------------------------------------------------------------------
// open the tga file.
//----------------------------------------------------------------------
sFile.Init(DiskFile(szFilename));
if (!sFile.Open(EFM_Read))
{
sFile.Kill();
return FALSE;
}
//----------------------------------------------------------------------
// read the header
//----------------------------------------------------------------------
if (sFile.Read(&tgaheader, 1, 12) != 12)
{
sFile.Close();
sFile.Kill();
return FALSE;
}
sFile.Close();
sFile.Kill();
//----------------------------------------------------------------------
// check whether the TGA Header matches a compressed one or not
//----------------------------------------------------------------------
if (memcmp(uTGAcompare, &tgaheader, 12) == 0)
{
return LoadUncompressedTrueColourTGA(pcImage, szFilename);
}
/*
else
if (memcmp(cTGAcompare, &tgaheader, 10) == 0)
{
return LoadCompressedTrueColourTGA(pcImage, filename);
}
*/
//----------------------------------------------------------------------
// if no header is matched, this is not a supported TGA format.
//----------------------------------------------------------------------
return FALSE;
}
示例2: CreateSource
CObjectSource* CObjectConverterNative::CreateSource(CAbstractFile* pcFile, char* szFileName)
{
CObjectSourceChunked* pcSourceChunked;
CObjectSourceSimple* pcSourceSimple;
BOOL bResult;
CFileBasic cFile;
int c;
if ((!pcFile) || (!szFileName))
{
return NULL;
}
cFile.Init(pcFile);
bResult = cFile.Open(EFM_Read);
if (!bResult)
{
return NULL;
}
bResult = cFile.ReadInt(&c);
if (!bResult)
{
return NULL;
}
if (c == CHUNKED_OBJECT_FILE)
{
pcSourceChunked = UMalloc(CObjectSourceChunked);
bResult = pcSourceChunked->Init(this, pcFile, szFileName);
if (!bResult)
{
return NULL;
}
return pcSourceChunked;
}
else if (c == BASIC_OBJECT_FILE)
{
pcSourceSimple = UMalloc(CObjectSourceSimple);
pcSourceSimple->Init(this, pcFile, szFileName);
return pcSourceSimple;
}
else
{
return NULL;
}
}
示例3: TestLogFileOpen
void TestLogFileOpen(void)
{
CLogFile* pcLogFile;
CMemoryFile* pcMemoryFile;
CFileBasic cFile;
BOOL bResult;
pcMemoryFile = MemoryFile();
pcLogFile = LogFile(pcMemoryFile);
AssertNotNull(pcLogFile);
cFile.Init(pcLogFile);
bResult = cFile.Open(EFM_ReadWrite_Create);
AssertTrue(bResult);
bResult = cFile.Close();
AssertTrue(bResult);
cFile.Kill();
}
示例4: AllocateSources
BOOL CNamedIndexesOptimiser::AllocateSources(CNamedIndexesBlocks* pcBlocks, CIndexedFile* pcIndexedFile)
{
CFileBasic* pcFile;
filePos iSize;
filePos iNumBlocks;
int iChunks;
filePos iModulous;
int i;
CNamesIndexedSorterSource* pcSource;
filePos iPosition;
pcFile = pcIndexedFile->GetPrimaryFile();
iSize = pcFile->GetFileSize();
iNumBlocks = iSize / pcBlocks->GetDataSize();
iModulous = iSize % pcBlocks->GetDataSize();
if (iModulous != 0)
{
return FALSE;
}
iChunks = (int)(iNumBlocks / pcBlocks->GetNumBlocks());
iModulous = iNumBlocks % pcBlocks->GetNumBlocks();
if (iModulous != 0)
{
return FALSE;
}
macSources.Allocate(&gcSystemAllocator, iChunks);
for (i = 0; i < iChunks; i++)
{
iPosition = i * (pcBlocks->GetDataSize() * pcBlocks->GetNumBlocks());
pcSource = macSources.Get(i);
pcSource->Init(pcBlocks->GetDataSize(), iPosition);
}
return TRUE;
}
示例5: TestScratchPadAllocatorReadWrite
void TestScratchPadAllocatorReadWrite(void)
{
MemoryInit();
CScratchPadAllocator cAlloc;
CFileBasic cFile;
CScratchPadAllocator cAllocIn;
int i;
SScratchPadParams sParams;
cFile.Init(MemoryFile());
cFile.Open(EFM_ReadWrite_Create);
cFile.WriteInt(789);
cAlloc.Init(32 KB);
AssertTrue(cAlloc.Write(&cFile));
cFile.WriteInt(124);
cFile.Close();
cAlloc.Kill();
cFile.Open(EFM_Read);
cFile.ReadInt(&i);
AssertInt(789, i);
AssertTrue(cAllocIn.Read(&cFile));
cFile.ReadInt(&i);
AssertInt(124, i);
AssertInt(0, cAllocIn.GetScratchPad()->GetMemorySize());
AssertInt(0, cAllocIn.GetScratchPad()->GetUsedSize());
cAllocIn.GetScratchPad()->GetParams(&sParams);
AssertInt(32 KB, sParams.iChunkSize);
MemoryKill();
}
示例6: TestIndexTreeMemoryReadWrite
void TestIndexTreeMemoryReadWrite(void)
{
CFileBasic cFile;
CIndexTreeMemory cIndex;
CIndexTreeMemory cIndexIn;
cIndex.Init();
cIndex.Put("AAA", "DENISA", 7);
cIndex.Put("AA", "FATJETA", 8);
cIndex.Put("AAB", "ARIANA", 7);
cIndex.Put("AAC", "GEORGE", 7);
cIndex.Put("AB", "IRMA", 5);
cIndex.Put("ABA", "JULIANA", 8);
cIndex.Put("ABB", "LULE", 5);
cIndex.Put("C", "VENERA", 7);
cIndex.Put("DDDD", "PRANVERA", 9);
cIndex.Put("DD", "PRIMERA", 8);
AssertInt(14, cIndex.CountAllocatedNodes());
AssertInt(10, cIndex.RecurseSize());
AssertInt(10, cIndex.NumElements());
cFile.Init(MemoryFile());
cFile.Open(EFM_Write_Create);
AssertTrue(cIndex.Write(&cFile));
cIndex.Kill();
cFile.Close();
cFile.Open(EFM_Read);
AssertTrue(cIndexIn.Read(&cFile));
cFile.Close();
cFile.Kill();
AssertInt(14, cIndexIn.CountAllocatedNodes());
AssertInt(10, cIndexIn.RecurseSize());
AssertInt(10, cIndexIn.NumElements());
AssertString("DENISA", (char*)cIndexIn.Get("AAA"));
AssertString("FATJETA", (char*)cIndexIn.Get("AA"));
AssertString("ARIANA", (char*)cIndexIn.Get("AAB"));
AssertString("GEORGE", (char*)cIndexIn.Get("AAC"));
AssertString("IRMA", (char*)cIndexIn.Get("AB"));
AssertString("JULIANA", (char*)cIndexIn.Get("ABA"));
AssertString("LULE", (char*)cIndexIn.Get("ABB"));
AssertString("VENERA", (char*)cIndexIn.Get("C"));
AssertString("PRANVERA", (char*)cIndexIn.Get("DDDD"));
AssertString("PRIMERA", (char*)cIndexIn.Get("DD"));
cIndexIn.Kill();
}
示例7: TestBufferedFileRead
void TestBufferedFileRead(void)
{
CFileUtil cFileUtil;
CFileBasic cFile;
CTextFile cText;
char sz[20];
char c;
int iCount;
int i;
char szExpected[20];
cFileUtil.Delete("Test.txt");
cText.Init();
cText.mcText.Append("abcdefghijk");
cText.Write("Test.txt");
cText.Kill();
cFile.Init(BufferedFile(DiskFile("Test.txt"), 3));
cFile.Open(EFM_Read);
for (c = 'a'; c <= 'k'; c++)
{
AssertFalse(cFile.IsEndOfFile());
memset(sz, 0, 20);
iCount = (int)cFile.Read(sz, 1, 1);
AssertChar(c, sz[0]);
AssertChar(0, sz[1]);
AssertInt(1, iCount);
}
AssertTrue(cFile.IsEndOfFile());
cFile.Seek(0);
szExpected[2] = 0;
for (i = 0; i < 5; i++)
{
AssertFalse(cFile.IsEndOfFile());
memset(sz, 0, 20);
iCount = (int)cFile.Read(sz, 1, 2);
szExpected[0] = 'a' + (char)i * 2;
szExpected[1] = 'b' + (char)i * 2;
AssertString(szExpected, sz);
AssertInt(2, iCount);
}
AssertFalse(cFile.IsEndOfFile());
memset(sz, 0, 20);
iCount = (int)cFile.Read(sz, 1, 2);
AssertString("k", sz);
AssertInt(1, iCount);
AssertTrue(cFile.IsEndOfFile());
cFile.Seek(0);
szExpected[3] = 0;
for (i = 0; i < 3; i++)
{
AssertFalse(cFile.IsEndOfFile());
memset(sz, 0, 20);
iCount = (int)cFile.Read(sz, 1, 3);
szExpected[0] = 'a' + (char)i * 3;
szExpected[1] = 'b' + (char)i * 3;
szExpected[2] = 'c' + (char)i * 3;
AssertString(szExpected, sz);
AssertInt(3, iCount);
}
AssertFalse(cFile.IsEndOfFile());
memset(sz, 0, 20);
iCount = (int)cFile.Read(sz, 1, 3);
AssertString("jk", sz);
AssertInt(2, iCount);
AssertTrue(cFile.IsEndOfFile());
cFile.Kill();
cFileUtil.Delete("Test.txt");
}
示例8: TestLogFileMultipleReadsAfterOpens
void TestLogFileMultipleReadsAfterOpens(void)
{
CLogFile* pcLogFile;
CDiskFile* pcDiskFile;
CFileBasic cFile;
CFileUtil cFileUtil;
char szSource[] = {"The Name of the Wise Man"};
int iSourcelen;
char szResult[50];
char szWrite[] = {"Cat Catt ct... "};
int iWriteLen;
char szA[] = {"A"};
cFileUtil.RemoveDir("Output/LogFile2");
cFileUtil.MakeDir("Output/LogFile2");
pcDiskFile = DiskFile("Output/LogFile2/OpenClose.txt");
pcDiskFile->Open(EFM_ReadWrite_Create);
iSourcelen = (int)strlen(szSource);
pcDiskFile->Write(szSource, iSourcelen + 1, 1);
pcDiskFile->Close();
AssertTrue(cFileUtil.Exists("Output/LogFile2/OpenClose.txt"));
pcLogFile = LogFile(pcDiskFile);
cFile.Init(pcLogFile);
pcLogFile->Begin();
AssertTrue(cFile.Open(EFM_Read));
AssertInt(iSourcelen + 1, (int)cFile.GetFileSize());
cFile.ReadData(szResult, iSourcelen + 1);
AssertString(szSource, szResult);
cFile.Close();
cFile.Open(EFM_ReadWrite_Create);
iWriteLen = (int)strlen(szWrite);
cFile.WriteData(szWrite, iWriteLen);
AssertInt(iSourcelen + 1, (int)cFile.GetFileSize());
pcLogFile->Close();
cFile.Delete();
AssertTrue(cFileUtil.Exists("Output/LogFile2/OpenClose.txt"));
AssertInt(0, (int)cFile.GetFileSize());
cFile.Open(EFM_ReadWrite_Create);
cFile.Write(szA, 2, 1);
AssertInt(2, (int)cFile.GetFileSize());
cFile.Close();
pcLogFile->Commit();
cFile.Kill();
AssertTrue(cFileUtil.Exists("Output/LogFile2/OpenClose.txt"));
AssertInt(2, cFileUtil.Size("Output/LogFile2/OpenClose.txt"));
pcDiskFile = DiskFile("Output/LogFile2/OpenClose.txt");
pcLogFile = LogFile(pcDiskFile);
cFile.Init(pcLogFile);
pcLogFile->Begin();
AssertTrue(cFile.Open(EFM_Read));
cFile.ReadData(szResult, 2);
AssertString("A", szResult);
cFile.Seek(0);
cFile.ReadData(szResult, 2);
AssertString("A", szResult);
cFile.Close();
cFile.Delete();
pcLogFile->Commit();
cFile.Kill();
AssertFalse(cFileUtil.Exists("Output/LogFile2/OpenClose.txt"));
}
示例9: TestBufferedFileWrite
void TestBufferedFileWrite(void)
{
CFileUtil cFileUtil;
CFileBasic cFile;
CTextFile cText;
cFileUtil.Delete("Test.txt");
cFile.Init(BufferedFile(DiskFile("Test.txt"), 3));
cFile.Open(EFM_Write_Create);
cFile.Write("ab", 1, 2);
cFile.Write("cd", 1, 2);
cFile.Close();
cFile.Kill();
cText.Init();
cText.Read("Test.txt");
AssertString("abcd", cText.mcText.Text());
cText.Kill();
cFile.Init(BufferedFile(DiskFile("Test.txt"), 5));
cFile.Open(EFM_Write_Create);
cFile.Write("abcdefghi", 1, 9);
cFile.Write("jklmn", 1, 5);
cFile.Close();
cFile.Kill();
cText.Init();
cText.Read("Test.txt");
AssertString("abcdefghijklmn", cText.mcText.Text());
cText.Kill();
cFile.Init(BufferedFile(DiskFile("Test.txt"), 5));
cFile.Open(EFM_ReadWrite);
cFile.Seek(4);
cFile.Write("xyz", 3, 1);
cFile.Close();
cFile.Kill();
cText.Init();
cText.Read("Test.txt");
AssertString("abcdxyzhijklmn", cText.mcText.Text());
cText.Kill();
cFile.Init(BufferedFile(DiskFile("Test.txt"), 8));
cFile.Open(EFM_ReadWrite);
cFile.Seek(0, EFSO_END);
cFile.Write("opqrst", 6, 1);
cFile.Seek(0);
cFile.Write("123456", 6, 1);
cFile.Write("78", 2, 1);
cFile.Close();
cFile.Kill();
cText.Init();
cText.Read("Test.txt");
AssertString("12345678ijklmnopqrst", cText.mcText.Text());
cText.Kill();
cFile.Init(BufferedFile(DiskFile("Test.txt"), 3));
cFile.Open(EFM_Write_Create);
cFile.Write("ab", 1, 2);
cFile.Write("cdef", 1, 4);
cFile.Write("gh", 1, 2);
cFile.Close();
cFile.Kill();
cText.Init();
cText.Read("Test.txt");
AssertString("abcdefgh", cText.mcText.Text());
cText.Kill();
cFileUtil.Delete("Test.txt");
}
示例10: TestLogFileRead
void TestLogFileRead(void)
{
CLogFile* pcLogFile;
CMemoryFile* pcMemoryFile;
CFileBasic cFile;
BOOL bResult;
int iLength;
char sz[200];
filePos iRead;
pcMemoryFile = MemoryFile();
cFile.Init(pcMemoryFile);
cFile.Open(EFM_Write_Create);
cFile.WriteString("The suspense is killing me!");
cFile.Close();
pcLogFile = LogFile(pcMemoryFile);
cFile.Init(pcLogFile);
bResult = cFile.Open(EFM_Read);
AssertTrue(bResult);
pcLogFile->Begin();
bResult = cFile.ReadStringLength(&iLength);
AssertTrue(bResult);
AssertInt(28, iLength);
AssertFalse(cFile.IsEndOfFile());
bResult = cFile.ReadStringChars(sz, iLength);
AssertString("The suspense is killing me!", sz);
AssertTrue(cFile.IsEndOfFile());
memset(sz, 0, 200);
bResult = cFile.Seek(20);
AssertTrue(bResult);
bResult = cFile.ReadStringChars(sz, 8);
AssertString("killing ", sz);
AssertLongLongInt(28, cFile.GetFilePos());
AssertFalse(cFile.IsEndOfFile());
memset(sz, 0, 200);
bResult = cFile.ReadStringChars(sz, 4);
AssertString("me!", sz);
AssertLongLongInt(32, cFile.GetFilePos());
AssertTrue(cFile.IsEndOfFile());
iRead = cFile.Read(sz, 1, 1);
AssertLongLongInt(0, iRead);
AssertLongLongInt(32, cFile.GetFilePos());
AssertTrue(cFile.IsEndOfFile());
AssertLongLongInt(32, cFile.GetFilePos());
AssertTrue(cFile.IsEndOfFile());
bResult = cFile.Close();
AssertTrue(bResult);
cFile.Kill();
}
示例11: TestLogFileCommandsComplex
void TestLogFileCommandsComplex(void)
{
CLogFile* pcLogFile;
CMemoryFile* pcMemoryFile;
CFileBasic cFile;
BOOL bResult;
int iWritten;
char szABC[] = {"ABCDEFGHIJK"};
char sz123[] = {"123"};
char sz4[] = {"4"};
char szExclamation[] = {"!?"};
char szQWE[] = {"_QWE_"};
char szResult[12];
pcMemoryFile = MemoryFile();
pcMemoryFile->Open(EFM_ReadWrite_Create);
pcMemoryFile->Write(szABC, 1, 12);
pcMemoryFile->Close();
pcLogFile = LogFile(pcMemoryFile);
cFile.Init(pcLogFile);
pcLogFile->Begin();
cFile.Open(EFM_ReadWrite_Create);
AssertInt(12, (int)cFile.GetFileLength());
iWritten = (int)cFile.Write(sz123, 1, 3);
AssertInt(3, iWritten);
iWritten = (int)cFile.Write(sz4, 1, 1);
AssertInt(1, iWritten);
cFile.Close();
cFile.Open(EFM_ReadWrite_Create);
cFile.Write(szExclamation, 1, 2);
cFile.Seek(3, EFSO_CURRENT);
cFile.Write(szQWE, 5, 1);
cFile.Close();
cFile.Open(EFM_Read);
AssertInt(12, (int)cFile.GetFileLength());
memset(szResult, 0, 12);
cFile.Read(szResult, 12, 1);
AssertString("!?34E_QWE_K", szResult);
cFile.Close();
bResult = pcLogFile->Commit();
AssertTrue(bResult);
AssertFalse(pcMemoryFile->IsOpen());
AssertInt(12, pcMemoryFile->GetBufferSize());
AssertString("!?34E_QWE_K", (char*)pcMemoryFile->GetBufferPointer());
pcLogFile->Kill();
}
示例12: TestLogFileFindHoles
void TestLogFileFindHoles(void)
{
CLogFile* pcLogFile;
CFileBasic cFile;
BOOL bResult;
int iInt1;
int iInt2;
int iInt3;
CArrayPointer apvOverlapping;
int i;
int iSize;
pcLogFile = LogFile(NULL);
cFile.Init(pcLogFile);
pcLogFile->Begin();
bResult = cFile.Open(EFM_ReadWrite_Create);
AssertTrue(bResult);
iInt1 = 872349342;
iInt2 = 763421934;
iInt3 = 158723346;
iSize = sizeof(int);
apvOverlapping.Init();
bResult = pcLogFile->TestFindHoles(1, &apvOverlapping, 0, 1);
AssertTrue(bResult);
AssertInt(0, apvOverlapping.NumElements());
apvOverlapping.Kill();
cFile.Write(&iInt1, 4, 1);
bResult = pcLogFile->TestFindHoles(1, &apvOverlapping, 0, 4);
AssertFalse(bResult);
cFile.Write(&iInt2, 4, 1);
bResult = pcLogFile->TestFindHoles(1, &apvOverlapping, 0, 8);
AssertFalse(bResult);
for (i = 0; i < 8; i++)
{
bResult = pcLogFile->TestFindHoles(1, &apvOverlapping, 0, i);
AssertFalse(bResult);
}
for (i = 0; i < 8; i++)
{
bResult = pcLogFile->TestFindHoles(1, &apvOverlapping, i, 8 -i);
AssertFalse(bResult);
}
bResult = pcLogFile->TestFindHoles(1, &apvOverlapping, 7, 2);
AssertTrue(bResult);
AssertInt(1, apvOverlapping.NumElements());
apvOverlapping.Kill();
cFile.Seek(4, EFSO_CURRENT);
cFile.Write(&iInt3, 4, 1);
bResult = pcLogFile->TestFindHoles(1, &apvOverlapping, 0, 16);
AssertTrue(bResult);
AssertInt(2, apvOverlapping.NumElements());
apvOverlapping.Kill();
bResult = pcLogFile->TestFindHoles(1, &apvOverlapping, 12, 4);
AssertFalse(bResult);
bResult = pcLogFile->TestFindHoles(1, &apvOverlapping, 11, 5);
AssertTrue(bResult);
AssertInt(1, apvOverlapping.NumElements());
apvOverlapping.Kill();
bResult = pcLogFile->TestFindHoles(1, &apvOverlapping, 0, 8);
AssertFalse(bResult);
bResult = pcLogFile->TestFindHoles(1, &apvOverlapping, 0, 9);
AssertTrue(bResult);
AssertInt(1, apvOverlapping.NumElements());
apvOverlapping.Kill();
bResult = pcLogFile->TestFindHoles(1, &apvOverlapping, 7, 2);
AssertTrue(bResult);
AssertInt(1, apvOverlapping.NumElements());
apvOverlapping.Kill();
apvOverlapping.Init();
bResult = pcLogFile->TestFindHoles(1, &apvOverlapping, 8, 1);
AssertTrue(bResult);
AssertInt(0, apvOverlapping.NumElements());
apvOverlapping.Kill();
apvOverlapping.Init();
bResult = pcLogFile->TestFindHoles(1, &apvOverlapping, 8, 4);
AssertTrue(bResult);
AssertInt(0, apvOverlapping.NumElements());
apvOverlapping.Kill();
bResult = pcLogFile->TestFindHoles(1, &apvOverlapping, 8, 5);
AssertTrue(bResult);
AssertInt(1, apvOverlapping.NumElements());
apvOverlapping.Kill();
bResult = pcLogFile->TestFindHoles(1, &apvOverlapping, 0, 0);
//.........这里部分代码省略.........
示例13: TestLogFileCommandsSimple
void TestLogFileCommandsSimple(void)
{
CLogFile* pcLogFile;
CMemoryFile* pcMemoryFile;
CFileBasic cFile;
BOOL bResult;
int iInt;
int iWritten;
int iResult;
int iRead;
pcMemoryFile = MemoryFile();
pcLogFile = LogFile(pcMemoryFile);
cFile.Init(pcLogFile);
pcLogFile->Begin();
bResult = cFile.Open(EFM_ReadWrite_Create);
AssertTrue(bResult);
AssertTrue(cFile.IsOpen());
iInt = 872349342;
iWritten = (int)cFile.Write(&iInt, sizeof(int), 1);
AssertInt(1, iWritten);
AssertInt(0, pcMemoryFile->GetBufferSize());
bResult = cFile.Close();
AssertTrue(bResult);
AssertInt(3, pcLogFile->GetNumCommands());
bResult = cFile.Open(EFM_ReadWrite_Create);
AssertTrue(bResult);
AssertTrue(cFile.IsOpen());
AssertInt(sizeof(int), (int)cFile.GetFileLength());
iRead = (int)cFile.Read(&iResult, sizeof(int), 1);
AssertInt(1, iRead);
AssertInt(iInt, iResult);
bResult = cFile.Close();
AssertTrue(bResult);
AssertInt(5, pcLogFile->GetNumCommands());
bResult = pcLogFile->Commit();
AssertTrue(bResult);
AssertFalse(pcMemoryFile->IsOpen());
AssertInt(sizeof(int), pcMemoryFile->GetBufferSize());
AssertInt(iInt, *((int*)pcMemoryFile->GetBufferPointer()));
pcLogFile->Kill();
}
示例14: OptimiseBlock
BOOL CNamedIndexesOptimiser::OptimiseBlock(CNamedIndexesBlocks* pcBlocks, CIndexedFile* pcIndexedFile)
{
int i;
CNamesIndexedSorterSource* pcSource;
CFileBasic cDestFile;
BOOL bResult;
filePos iNumNames;
CNamedIndexedBlock cBlock;
if (!pcIndexedFile)
{
return TRUE;
}
bResult = AllocateSources(pcBlocks, pcIndexedFile);
ReturnOnFalse(bResult);
bResult = LoadInitialSources(pcIndexedFile, pcBlocks->GetDataSize());
ReturnOnFalse(bResult);
bResult = OpenDestinationFile(&cDestFile, pcIndexedFile->GetFileName());
if (!bResult)
{
KillSources();
return FALSE;
}
iNumNames = macSources.NumElements() * pcBlocks->GetNumBlocks();
for (i = 0; i < iNumNames; i++)
{
pcSource = GetSmallestSource(pcBlocks->GetNumBlocks());
if (!pcSource)
{
break;
}
bResult = cDestFile.WriteData(pcSource->mpcCurrent, pcBlocks->GetDataSize());
if (!bResult)
{
cDestFile.Close();
cDestFile.Kill();
KillSources();
return FALSE;
}
bResult = pcSource->ReadNext(pcIndexedFile->GetPrimaryFile(), pcBlocks->GetDataSize());
if (!bResult)
{
cDestFile.Close();
cDestFile.Kill();
KillSources();
return TRIERROR;
}
}
memset_fast(&cBlock, 0, pcBlocks->GetDataSize());
for (; i < iNumNames; i++)
{
cDestFile.WriteData(&cBlock, pcBlocks->GetDataSize());
}
cDestFile.Close();
cDestFile.Kill();
KillSources();
return TRUE;
}
示例15: TestLogFileWrite
void TestLogFileWrite(void)
{
CLogFile* pcLogFile;
CMemoryFile* pcMemoryFile;
CFileBasic cFile;
BOOL bResult;
int iLength;
char sz[200];
pcMemoryFile = MemoryFile();
pcLogFile = LogFile(pcMemoryFile);
cFile.Init(pcLogFile);
bResult = cFile.Open(EFM_ReadWrite_Create);
AssertTrue(bResult);
bResult = cFile.WriteString("The suspense is killing me!");
AssertTrue(bResult);
AssertNull((char*)pcMemoryFile->GetBufferPointer());
AssertInt(1, pcLogFile->GetNumWrites());
AssertLongLongInt(32, pcLogFile->GetWriteSize(0));
bResult = cFile.Seek(8);
AssertTrue(bResult);
bResult = cFile.WriteData("camisole", 8);
AssertTrue(bResult);
AssertInt(1, pcLogFile->GetNumWrites());
AssertLongLongInt(32, pcLogFile->GetWriteSize(0));
AssertNull((char*)pcMemoryFile->GetBufferPointer());
cFile.Seek(0);
bResult = cFile.ReadStringLength(&iLength);
AssertTrue(bResult);
AssertInt(28, iLength);
AssertFalse(cFile.IsEndOfFile());
bResult = cFile.ReadStringChars(sz, iLength);
AssertString("The camisole is killing me!", sz);
AssertTrue(cFile.IsEndOfFile());
bResult = pcLogFile->Commit();
AssertTrue(bResult);
AssertString("The camisole is killing me!", (char*)RemapSinglePointer(pcMemoryFile->GetBufferPointer(), sizeof(int)));
bResult = cFile.Close(); //This should go before Commit
AssertTrue(bResult);
pcLogFile->Begin();
bResult = cFile.Open(EFM_ReadWrite_Create);
AssertTrue(bResult);
bResult = cFile.Seek(4);
AssertTrue(bResult);
bResult = cFile.WriteData("Dog", 3);
bResult = cFile.Seek(20);
AssertTrue(bResult);
bResult = cFile.WriteData("plurgle", 7);
AssertInt(2, pcLogFile->GetNumWrites());
AssertLongLongInt(3, pcLogFile->GetWriteSize(0));
AssertLongLongInt(7, pcLogFile->GetWriteSize(1));
AssertString("The camisole is killing me!", (char*)RemapSinglePointer(pcMemoryFile->GetBufferPointer(), sizeof(int)));
cFile.Seek(0);
bResult = cFile.ReadStringLength(&iLength);
AssertTrue(bResult);
AssertInt(28, iLength);
AssertFalse(cFile.IsEndOfFile());
bResult = cFile.ReadStringChars(sz, iLength);
AssertTrue(bResult);
AssertString("Dog camisole is plurgle me!", sz);
AssertTrue(cFile.IsEndOfFile());
bResult = pcLogFile->Commit();
AssertTrue(bResult);
AssertString("Dog camisole is plurgle me!", (char*)RemapSinglePointer(pcMemoryFile->GetBufferPointer(), sizeof(int)));
bResult = cFile.Close();
AssertTrue(bResult);
pcLogFile->Begin();
bResult = cFile.Open(EFM_ReadWrite_Create);
AssertTrue(bResult);
cFile.Seek(4);
cFile.WriteData("X", 1);
cFile.Seek(6);
bResult = cFile.WriteData("Z", 1);
cFile.Seek(28);
cFile.WriteData("A", 1);
cFile.Seek(30);
bResult = cFile.WriteData("C", 1);
AssertInt(4, pcLogFile->GetNumWrites());
cFile.Seek(5);
cFile.WriteData("Y", 1);
//.........这里部分代码省略.........