//! returns fileindex s32 CPakReader::findFile(const c8* simpleFilename) { SPakFileEntry entry; entry.simpleFileName = simpleFilename; if (IgnoreCase) entry.simpleFileName.make_lower(); if (IgnorePaths) deletePathFromFilename(entry.simpleFileName); s32 res = FileList.binary_search(entry); #ifdef _DEBUG if (res == -1) { for (u32 i=0; i<FileList.size(); ++i) if (FileList[i].simpleFileName == entry.simpleFileName) { os::Printer::log("File in archive but not found.", entry.simpleFileName.c_str(), ELL_ERROR); break; } } #endif return res; }
//! Searches for a file or folder within the list, returns the index SINT32 CFileList::findFile(const path& filename, bool isDirectory = false) const { SFileListEntry entry; // we only need FullName to be set for the search entry.FullName = filename; entry.IsDirectory = isDirectory; // exchange //entry.FullName.replace('\\', '/'); StringUtil::replaceAll(entry.FullName, "\\", "/"); // remove trailing slash if (entry.Name[entry.Name.length() - 1] == '/') //(entry.FullName.lastChar() == '/') { entry.IsDirectory = true; entry.FullName[entry.FullName.size() - 1] = 0; //entry.FullName.validate(); } if (IgnoreCase) StringUtil::toLowerCase(entry.FullName);//entry.FullName.make_lower(); if (IgnorePaths) deletePathFromFilename(entry.FullName); int index = std::distance(Files.begin(), std::find(Files.begin(), Files.end(), entry)); return index;//Files.binary_search(entry); }
//! returns true if the file maybe is able to be loaded by this class bool CArchiveLoaderMount::isALoadableFileFormat(const core::string<c16>& filename) const { bool ret = false; core::string<c16> fname(filename); deletePathFromFilename(fname); if (!fname.size()) { ret = true; } return ret; }
//! returns true if the file maybe is able to be loaded by this class bool CArchiveLoaderMount::isALoadableFileFormat(const io::path& filename) const { bool ret = false; io::path fname(filename); deletePathFromFilename(fname); if (!fname.size()) { ret = true; } return ret; }
//! returns true if the file maybe is able to be loaded by this class bool CArchiveLoaderMount::isALoadableFileFormat(const io::path& filename) const { io::path fname(filename); deletePathFromFilename(fname); if (!fname.size()) return true; IFileList* list = FileSystem->createFileList(); if (list) { // check if name is found as directory if (list->findFile(filename, true)) return true; } return false; }
//! adds a file or folder UINT32 CFileList::addItem(const path& fullPath, UINT32 offset, UINT32 size, bool isDirectory, UINT32 id) { SFileListEntry entry; entry.ID = id ? id : Files.size(); entry.Offset = offset; entry.Size = size; entry.Name = fullPath; StringUtil::replaceAll(entry.Name, "\\", "/"); //entry.Name.replace('\\', '/'); entry.IsDirectory = isDirectory; // remove trailing slash if (entry.Name[entry.Name.length()-1] == '/') //entry.Name.lastChar() == '/' { entry.IsDirectory = true; entry.Name[entry.Name.size() - 1] = 0; //entry.Name.validate(); } if (IgnoreCase) StringUtil::toLowerCase(entry.Name); //entry.Name.make_lower(); entry.FullName = entry.Name; deletePathFromFilename(entry.Name); if (IgnorePaths) entry.FullName = entry.Name; //os::Printer::log(Path.c_str(), entry.FullName); Files.push_back(entry); return Files.size() - 1; }