void TestFileSystemInit(void) { CFileSystem cSystem; char* szFullName; CFileUtil cFileUtil; CChars szWorkingDirectory; CChars szTemp; CTextFile cTextFile; szWorkingDirectory.Init("Finder"); cFileUtil.FullPath(&szWorkingDirectory); cSystem.Init("Finder"); szFullName = cSystem.GetFileName("Lord/1.rar"); szTemp.Init(szFullName); szTemp.RemoveFromStart(szWorkingDirectory.Length()+1); szTemp.Replace(FILE_SEPARATOR[0], '/'); AssertString("Lord/1.rar", szTemp.Text()); szTemp.Kill(); szFullName = cSystem.GetFileName("File.txt"); cTextFile.Init(); cTextFile.Read(szFullName); AssertString("Hello World.", cTextFile.Text()); cTextFile.Kill(); cSystem.Kill(); }
////////////////////////////////////////////////////////////////////////// // // // // ////////////////////////////////////////////////////////////////////////// BOOL CFiles::AddPackFile(CFileNodeSystemFile* pcFileNodeSystemFile) { CPackFileOffset* pcPackFiles; char* szFullName; CChars szPackFileOffset; CChars* pszFullDirectory; int iLength; BOOL bResult; int iRank; pszFullDirectory = mcFileSystem.GetFullDirectoryName(); iLength = mszPackFilesExtension.Length()+1; pcPackFiles = mcPackFilesArray.Add(); new(pcPackFiles) CPackFileOffset(); szFullName = pcFileNodeSystemFile->GetFullName(); szPackFileOffset.Init(szFullName); szPackFileOffset.RemoveFromStart(pszFullDirectory->Length()+1); szPackFileOffset.RemoveFromEnd(iLength); szPackFileOffset.Replace('\\', '/'); iRank = szPackFileOffset.Count('/'); bResult = pcPackFiles->Init(szPackFileOffset.Text(), szFullName, iRank); szPackFileOffset.Kill(); return bResult; }
BOOL CPackFiles::RecurseUnpack(CFileNodePackFileNode* pcNode, char* szDestination) { CChars szFileName; CFileNodePackFileNode* pcChild; int i; CPackFileNode* pcFile; BOOL bResult; CPackFile* pcPackFile; CFileCopier cCopier; CDiskFile cDiskFile; CFileUtil cFileUtil; if (pcNode->IsDirectory()) { bResult = TRUE; for (i = 0; i < pcNode->Directory()->maNodeFiles.NumElements(); i++) { pcChild = (CFileNodePackFileNode*)pcNode->Directory()->maNodeFiles.Get(i); bResult &= RecurseUnpack(pcChild, szDestination); } return bResult; } else if (pcNode->IsFile()) { szFileName.Init(szDestination); szFileName.Append('/'); pcNode->GetFullName(&szFileName); szFileName.Replace('/', FILE_SEPARATOR[0]); pcFile = pcNode->File(); pcPackFile = PackFile(this, pcFile); if (!pcPackFile) { szFileName.Kill(); return FALSE; } cDiskFile.Init(szFileName.Text()); cFileUtil.RemoveLastFromPath(&szFileName); cFileUtil.MakeDir(szFileName.Text()); bResult = cCopier.Copy(pcPackFile, &cDiskFile); cDiskFile.Kill(); szFileName.Kill(); return bResult; } return FALSE; }
////////////////////////////////////////////////////////////////////////// // // // // ////////////////////////////////////////////////////////////////////////// void CPreprocessor::FindBestInclude(CExternalString* pcInclude, BOOL bSystemFile, CHeaderFile** ppcCFile, CHeaderNameMap** ppcHeaderNameMap) { CChars szInclude; CHeaderFile* pcBestFile; CHeaderNameMap* pcBestHeaderNameMap; int iMatch; int iBestMatch; int i; CHeaderNameMap* pcHeaderNameMap; CHeaderFile** ppcHeaderFile; CHeaderFile* pcHeaderFile; CHeaderNameMapDirectory* pcCurrentDirectory; CChars szPath; szInclude.Init(pcInclude->msz, 0, pcInclude->miLen); szInclude.Replace('\\', '/'); iBestMatch = 0; pcBestFile = NULL; pcBestHeaderNameMap = NULL; for (i = 0; i < mcHeaderNames.NumElements(); i++) { pcHeaderNameMap = *mcHeaderNames.Get(i); ppcHeaderFile = pcHeaderNameMap->mcFileNames.Get(szInclude.Text()); if (ppcHeaderFile) { pcHeaderFile = *ppcHeaderFile; iMatch = 2; if (pcHeaderFile->IsSystemFile() && bSystemFile) { iMatch += 2; } if (iMatch > iBestMatch) { iBestMatch = iMatch; pcBestFile = pcHeaderFile; pcBestHeaderNameMap = pcHeaderNameMap; } } } pcCurrentDirectory = mcHeadersStack.Tail(); if (pcCurrentDirectory) { for (i = 0; i < mcHeaderNames.NumElements(); i++) { pcHeaderNameMap = *mcHeaderNames.Get(i); if (pcHeaderNameMap == pcCurrentDirectory->mpcHeaderNameMap) { if (pcCurrentDirectory->mszBaseDirectoryName.Length() > pcHeaderNameMap->mszBaseDirectory.Length()) { szPath.Init(pcCurrentDirectory->mszBaseDirectoryName); szPath.RemoveFromStart(pcHeaderNameMap->mszBaseDirectory.Length()+1); szPath.Append('/'); szPath.Append(szInclude); ppcHeaderFile = pcHeaderNameMap->mcFileNames.Get(szPath.Text()); if (ppcHeaderFile) { pcHeaderFile = *ppcHeaderFile; iMatch = 2; if (pcHeaderFile->IsSystemFile() && bSystemFile) { iMatch += 2; } if (iMatch > iBestMatch) { iBestMatch = iMatch; pcBestFile = pcHeaderFile; pcBestHeaderNameMap = pcHeaderNameMap; } } szPath.Kill(); } } } } szInclude.Kill(); *ppcCFile = pcBestFile; *ppcHeaderNameMap = pcBestHeaderNameMap; }