#include <path.h>
all path and files are *case sensitive* on linux.
Nevrax France
Definition at line 55 of file path.h.
Static Public Member Functions | |
| void | addIgnoredDoubleFile (const std::string &ignoredFile) |
| void | addSearchBigFile (const std::string &filename, bool recurse, bool alternative, class NLMISC::IProgressCallback *progressCallBack=NULL) |
| void | addSearchFile (const std::string &file, bool remap=false, const std::string &virtual_ext="", class NLMISC::IProgressCallback *progressCallBack=NULL) |
| void | addSearchListFile (const std::string &filename, bool recurse, bool alternative) |
| void | addSearchPath (const std::string &path) |
| void | addSearchPath (const std::string &path, bool recurse, bool alternative, class IProgressCallback *progressCallBack=NULL) |
| void | clearMap () |
| void | display () |
| bool | exists (const std::string &filename) |
| std::string | getCurrentPath () |
| void | getFileList (const std::string &extension, std::vector< std::string > &filenames) |
| std::string | getFullPath (const std::string &path, bool addFinalSlash=true) |
| void | getPathContent (const std::string &path, bool recurse, bool wantDir, bool wantFile, std::vector< std::string > &result, class IProgressCallback *progressCallBack=NULL, bool showEverything=false) |
| bool | isMemoryCompressed () |
| void | loadRemappedFiles (const std::string &file) |
| std::string | lookup (const std::string &filename, bool throwException=true, bool displayWarning=true, bool lookupInLocalDirectory=true) |
| bool | makePathRelative (const char *basePath, std::string &relativePath) |
| void | memoryCompress () |
| void | memoryUncompress () |
| void | remapExtension (const std::string &ext1, const std::string &ext2, bool substitute) |
| void | remapFile (const std::string &file1, const std::string &file2) |
| void | removeAllAlternativeSearchPath () |
| bool | setCurrentPath (const char *) |
| std::string | standardizeDosPath (const std::string &path) |
| std::string | standardizePath (const std::string &path, bool addFinalSlash=true) |
Private Member Functions | |
| CPath () | |
| sint | findExtension (const std::string &ext1, const std::string &ext2) |
Static Private Member Functions | |
| CPath * | getInstance () |
| void | insertFileInMap (const std::string &filename, const std::string &filepath, bool remap, const std::string &extension) |
| CMCFileEntry * | MCfind (const std::string &filename) |
Private Attributes | |
| char * | _AllFileNames |
| std::vector< std::string > | _AlternativePaths |
| std::vector< std::pair< std::string, std::string > > | _Extensions |
| first ext1, second ext2 (ext1 could remplace ext2) | |
| std::map< std::string, CFileEntry > | _Files |
| std::vector< CMCFileEntry > | _MCFiles |
| bool | _MemoryCompressed |
| std::map< std::string, std::string > | _RemappedFiles |
| std::vector< std::string > | IgnoredFiles |
| CStaticStringMapper | SSMext |
| CStaticStringMapper | SSMpath |
Static Private Attributes | |
| CPath * | _Instance = NULL |
|
|
Definition at line 223 of file path.h. References _MemoryCompressed.
00224 {
00225 _MemoryCompressed = false;
00226 }
|
|
|
If File in this list is added more than one in an addSearchPath, it doesn't launch a warning. Definition at line 1133 of file path.cpp. References uint.
01134 {
01135 NL_ALLOC_CONTEXT (MiPath);
01136 CPath::getInstance ()->IgnoredFiles.push_back(ignoredFile);
01137 }
|
|
||||||||||||||||||||
|
Same as AddSearchPath but with a big file "c:/test.nbf" all files name contain in the big file will be included (the extention (Nel Big File) is used to know that it's a big file) Definition at line 1025 of file path.cpp. References nlwarning.
01026 {
01027 //#ifndef NL_OS_WINDOWS
01028 // nlerror( "BNP currently not supported on Unix" ); // test of BNP failed on Linux
01029 //#endif
01030
01031 // Check if filename is not empty
01032 if (sBigFilename.empty())
01033 {
01034 nlwarning ("PATH: CPath::addSearchBigFile(%s, %d, %d): can't add empty file, skip it", sBigFilename.c_str(), recurse, alternative);
01035 return;
01036 }
01037 // Check if the file exists
01038 if (!CFile::isExists (sBigFilename))
01039 {
01040 nlwarning ("PATH: CPath::addSearchBigFile(%s, %d, %d): '%s' is not found, skip it", sBigFilename.c_str(), recurse, alternative, sBigFilename.c_str());
01041 return;
01042 }
01043 // Check if it s a file
01044 if (CFile::isDirectory (sBigFilename))
01045 {
01046 nlwarning ("PATH: CPath::addSearchBigFile(%s, %d, %d): '%s' is not a file, skip it", sBigFilename.c_str(), recurse, alternative, sBigFilename.c_str());
01047 return;
01048 }
01049 // Open and read the big file header
01050 CPath *inst = CPath::getInstance();
01051 nlassert(!inst->_MemoryCompressed);
01052
01053 FILE *Handle = fopen (sBigFilename.c_str(), "rb");
01054 if (Handle == NULL)
01055 {
01056 nlwarning ("PATH: CPath::addSearchBigFile(%s, %d, %d): can't open file, skip it", sBigFilename.c_str(), recurse, alternative);
01057 return;
01058 }
01059
01060 // add the link with the CBigFile singleton
01061 if (CBigFile::getInstance().add (sBigFilename, BF_ALWAYS_OPENED | BF_CACHE_FILE_ON_OPEN))
01062 {
01063 // also add the bigfile name in the map to retreive the full path of a .bnp when we want modification date of the bnp for example
01064 insertFileInMap (CFile::getFilename (sBigFilename), sBigFilename, false, CFile::getExtension(sBigFilename));
01065
01066 // parse the big file to add file in the map
01067 uint32 nFileSize=CFile::getFileSize (Handle);
01068 //nlfseek64 (Handle, 0, SEEK_END);
01069 //uint32 nFileSize = ftell (Handle);
01070 nlfseek64 (Handle, nFileSize-4, SEEK_SET);
01071 uint32 nOffsetFromBegining;
01072 fread (&nOffsetFromBegining, sizeof(uint32), 1, Handle);
01073 nlfseek64 (Handle, nOffsetFromBegining, SEEK_SET);
01074 uint32 nNbFile;
01075 fread (&nNbFile, sizeof(uint32), 1, Handle);
01076 for (uint32 i = 0; i < nNbFile; ++i)
01077 {
01078 // Progress bar
01079 if (progressCallBack)
01080 {
01081 progressCallBack->progress ((float)i/(float)nNbFile);
01082 progressCallBack->pushCropedValues ((float)i/(float)nNbFile, (float)(i+1)/(float)nNbFile);
01083 }
01084
01085 char FileName[256];
01086 uint8 nStringSize;
01087 fread (&nStringSize, 1, 1, Handle);
01088 fread (FileName, 1, nStringSize, Handle);
01089 FileName[nStringSize] = 0;
01090 uint32 nFileSize2;
01091 fread (&nFileSize2, sizeof(uint32), 1, Handle);
01092 uint32 nFilePos;
01093 fread (&nFilePos, sizeof(uint32), 1, Handle);
01094 string sTmp = strlwr(string(FileName));
01095 if (sTmp.empty())
01096 {
01097 nlwarning ("PATH: CPath::addSearchBigFile(%s, %d, %d): can't add empty file, skip it", sBigFilename.c_str(), recurse, alternative);
01098 continue;
01099 }
01100 string bigfilenamealone = CFile::getFilename (sBigFilename);
01101 string filenamewoext = CFile::getFilenameWithoutExtension (sTmp);
01102 string ext = strlwr(CFile::getExtension(sTmp));
01103
01104 insertFileInMap (sTmp, bigfilenamealone + "@" + sTmp, false, ext);
for (uint j = 0; j < inst->_Extensions.size (); j++)
{
if (inst->_Extensions[j].first == ext)
{
// need to remap
insertFileInMap (filenamewoext+"."+inst->_Extensions[j].second,
01105 bigfilenamealone + "@" + sTmp,
true,
inst->_Extensions[j].first);
}
}
// Progress bar
if (progressCallBack)
{
progressCallBack->popCropedValues ();
}
}
}
else
{
nlwarning ("PATH: CPath::addSearchBigFile(%s, %d, %d): can't add the big file", sBigFilename.c_str(), recurse, alternative);
01106 }
01107
01108 fclose (Handle);
01109 }
01110 |
|
||||||||||||||||||||
|
Same as AddSearchPath but with a file "c:/autoexec.bat" this file only will included. wildwards *doesn't* work Definition at line 929 of file path.cpp. References file.
00930 {
00931 NL_ALLOC_CONTEXT (MiPath);
00932 CPath *inst = CPath::getInstance();
00933 nlassert(!inst->_MemoryCompressed);
00934
00935 string newFile = standardizePath(file, false);
00936
00937 // check empty file
00938 if (newFile.empty())
00939 {
00940 nlwarning ("PATH: CPath::addSearchFile(%s, %d, %s): can't add empty file, skip it", file.c_str(), remap, virtual_ext.c_str());
00941 return;
00942 }
00943
00944 // check if the file exists
00945 if (!CFile::isExists (newFile))
00946 {
00947 nlwarning ("PATH: CPath::addSearchFile(%s, %d, %s): '%s' is not found, skip it", file.c_str(), remap, virtual_ext.c_str(), newFile.c_str());
00948 return;
00949 }
00950
00951 // check if it s a file
00952 if (CFile::isDirectory (newFile))
00953 {
00954 nlwarning ("PATH: CPath::addSearchFile(%s, %d, %s): '%s' is not a file, skip it", file.c_str(), remap, virtual_ext.c_str(), newFile.c_str());
00955 return;
00956 }
00957
00958 // check if it s a big file
00959 if (CFile::getExtension(newFile) == "bnp")
00960 {
00961 NL_DISPLAY_PATH ("PATH: CPath::addSearchFile(%s, %d, %s): '%s' is a big file, add it", file.c_str(), remap, virtual_ext.c_str(), newFile.c_str());
00962 addSearchBigFile(file, false, false, progressCallBack);
00963 return;
00964 }
00965
00966 string filenamewoext = CFile::getFilenameWithoutExtension (newFile);
00967 string filename, ext;
00968
00969 if (virtual_ext.empty())
00970 {
00971 filename = CFile::getFilename (newFile);
00972 ext = CFile::getExtension (filename);
00973 }
00974 else
00975 {
00976 filename = filenamewoext + "." + virtual_ext;
00977 ext = CFile::getExtension (newFile);
00978 }
00979
00980 insertFileInMap (filename, newFile, remap, ext);
00981
00982 if (!remap && !ext.empty())
00983 {
00984 // now, we have to see extension and insert in the map the remapped files
00985 for (uint i = 0; i < inst->_Extensions.size (); i++)
00986 {
00987 if (inst->_Extensions[i].first == strlwr(ext))
00988 {
00989 // need to remap
00990 addSearchFile (newFile, true, inst->_Extensions[i].second, progressCallBack);
00991 }
00992 }
00993 }
00994 }
|
|
||||||||||||||||
|
Same as AddSearchPath but with a path file "c:/test.pth" all files name contain in this file will be included (the extention is used to know that it's a path file) Definition at line 996 of file path.cpp.
00997 {
00998 NL_ALLOC_CONTEXT (MiPath);
00999 // check empty file
01000 if (filename.empty())
01001 {
01002 nlwarning ("PATH: CPath::addSearchListFile(%s, %d, %d): can't add empty file, skip it", filename.c_str(), recurse, alternative);
01003 return;
01004 }
01005
01006 // check if the file exists
01007 if (!CFile::isExists (filename))
01008 {
01009 nlwarning ("PATH: CPath::addSearchListFile(%s, %d, %d): '%s' is not found, skip it", filename.c_str(), recurse, alternative, filename.c_str());
01010 return;
01011 }
01012
01013 // check if it s a file
01014 if (CFile::isDirectory (filename))
01015 {
01016 nlwarning ("PATH: CPath::addSearchListFile(%s, %d, %d): '%s' is not a file, skip it", filename.c_str(), recurse, alternative, filename.c_str());
01017 return;
01018 }
01019
01020 // TODO lire le fichier et ajouter les fichiers qui sont dedans
01021
01022 }
|
|
|
Used only for compatibility with the old CPath. In this case, we don't use the map to have the same behavior as the old CPath Definition at line 78 of file path.h. References addSearchPath().
00078 { addSearchPath (path, false, true, NULL); }
|
|
||||||||||||||||||||
|
Adds a search path. The path is a directory "c:/temp" all files in the directory will be included (and recursively if asked) Alternative directories are not precached (instead of non Alternative files) and will used when a file is not found in the standard directories. For example, local data will be in the cached directories and server repository files will be in the Alternative files. If a new file is not found in the local data, we'll try to find it on the repositrory. When Alternative is false, all added file names must be uniq or a warning will be display. In the Alternative directories, it could have more than one file with the same name.
Definition at line 807 of file path.cpp. Referenced by addSearchPath().
00808 {
00809 NL_ALLOC_CONTEXT (MiPath);
00810 H_AUTO_INST(addSearchPath);
00811
00812 CPath *inst = CPath::getInstance();
00813 nlassert(!inst->_MemoryCompressed);
00814
00815 // check empty directory
00816 if (path.empty())
00817 {
00818 nlwarning ("PATH: CPath::addSearchPath(%s, %d, %d): can't add empty directory, skip it", path.c_str(), recurse, alternative);
00819 return;
00820 }
00821
00822 // check if it s a directory
00823 if (!CFile::isDirectory (path))
00824 {
00825 nlinfo ("PATH: CPath::addSearchPath(%s, %d, %d): '%s' is not a directory, I'll call addSearchFile()", path.c_str(), recurse, alternative, path.c_str());
00826 addSearchFile (path, false, "", progressCallBack);
00827 return;
00828 }
00829
00830 string newPath = standardizePath(path);
00831
00832 // check if it s a directory
00833 if (!CFile::isExists (newPath))
00834 {
00835 nlwarning ("PATH: CPath::addSearchPath(%s, %d, %d): '%s' is not found, skip it", path.c_str(), recurse, alternative, newPath.c_str());
00836 return;
00837 }
00838
00839 nlinfo ("PATH: CPath::addSearchPath(%s, %d, %d): adding the path '%s'", path.c_str(), recurse, alternative, newPath.c_str());
00840
00841 NL_DISPLAY_PATH("PATH: CPath::addSearchPath(%s, %d, %d): try to add '%s'", path.c_str(), recurse, alternative, newPath.c_str());
00842
00843 if (alternative)
00844 {
00845 vector<string> pathsToProcess;
00846
00847 // add the current path
00848 pathsToProcess.push_back (newPath);
00849
00850 if (recurse)
00851 {
00852 // find all path and subpath
00853 getPathContent (newPath, recurse, true, false, pathsToProcess, progressCallBack);
00854 }
00855
00856 for (uint p = 0; p < pathsToProcess.size(); p++)
00857 {
00858 // check if the path not already in the vector
00859 uint i;
00860 for (i = 0; i < inst->_AlternativePaths.size(); i++)
00861 {
00862 if (inst->_AlternativePaths[i] == pathsToProcess[p])
00863 break;
00864 }
00865 if (i == inst->_AlternativePaths.size())
00866 {
00867 // add them in the alternative directory
00868 inst->_AlternativePaths.push_back (pathsToProcess[p]);
00869 NL_DISPLAY_PATH("PATH: CPath::addSearchPath(%s, %d, %d): path '%s' added", newPath.c_str(), recurse, alternative, pathsToProcess[p].c_str());
00870 }
00871 else
00872 {
00873 nlwarning ("PATH: CPath::addSearchPath(%s, %d, %d): path '%s' already added", newPath.c_str(), recurse, alternative, pathsToProcess[p].c_str());
00874 }
00875 }
00876 }
00877 else
00878 {
00879 vector<string> filesToProcess;
00880
00881 // Progree bar
00882 if (progressCallBack)
00883 {
00884 progressCallBack->progress (0);
00885 progressCallBack->pushCropedValues (0, 0.5f);
00886 }
00887
00888 // find all files in the path and subpaths
00889 getPathContent (newPath, recurse, false, true, filesToProcess, progressCallBack);
00890
00891 // Progree bar
00892 if (progressCallBack)
00893 {
00894 progressCallBack->popCropedValues ();
00895 progressCallBack->progress (0.5);
00896 progressCallBack->pushCropedValues (0.5f, 1);
00897 }
00898
00899 // add them in the map
00900 for (uint f = 0; f < filesToProcess.size(); f++)
00901 {
00902 // Progree bar
00903 if (progressCallBack)
00904 {
00905 progressCallBack->progress ((float)f/(float)filesToProcess.size());
00906 progressCallBack->pushCropedValues ((float)f/(float)filesToProcess.size(), (float)(f+1)/(float)filesToProcess.size());
00907 }
00908
00909 string filename = CFile::getFilename (filesToProcess[f]);
00910 string filepath = CFile::getPath (filesToProcess[f]);
00911 // insertFileInMap (filename, filepath, false, CFile::getExtension(filename));
00912 addSearchFile (filesToProcess[f], false, "", progressCallBack);
00913
00914 // Progree bar
00915 if (progressCallBack)
00916 {
00917 progressCallBack->popCropedValues ();
00918 }
00919 }
00920
00921 // Progree bar
00922 if (progressCallBack)
00923 {
00924 progressCallBack->popCropedValues ();
00925 }
00926 }
00927 }
|
|
|
Clears the map that contains all cached files (Use this function to take into account new files). Definition at line 153 of file path.cpp. References _Files, _MemoryCompressed, NL_DISPLAY_PATH, and nlassert.
00154 {
00155 CPath *inst = CPath::getInstance();
00156 nlassert(!inst->_MemoryCompressed);
00157 inst->_Files.clear ();
00158 CBigFile::getInstance().removeAll ();
00159 NL_DISPLAY_PATH("PATH: CPath::clearMap(): map directory cleared");
00160 }
|
|
|
Definition at line 1195 of file path.cpp.
01196 {
01197 CPath *inst = CPath::getInstance ();
01198 nlinfo ("PATH: Contents of the map:");
01199 nlinfo ("PATH: %-25s %-5s %-5s %s", "filename", "ext", "remap", "full path");
01200 nlinfo ("PATH: ----------------------------------------------------");
01201 if (inst->_MemoryCompressed)
01202 {
01203 for (uint i = 0; i < inst->_MCFiles.size(); ++i)
01204 {
01205 const CMCFileEntry &fe = inst->_MCFiles[i];
01206 string ext = inst->SSMext.get(fe.idExt);
01207 string path = inst->SSMpath.get(fe.idPath);
01208 nlinfo ("PATH: %-25s %-5s %-5d %s", fe.Name, ext.c_str(), fe.Remapped, path.c_str());
01209 }
01210 }
01211 else
01212 {
01213 for (map<string, CFileEntry>::iterator it = inst->_Files.begin(); it != inst->_Files.end (); it++)
01214 {
01215 string ext = inst->SSMext.get((*it).second.idExt);
01216 string path = inst->SSMpath.get((*it).second.idPath);
01217 nlinfo ("PATH: %-25s %-5s %-5d %s", (*it).first.c_str(), ext.c_str(), (*it).second.Remapped, path.c_str());
01218 }
01219 }
01220 nlinfo ("PATH: ");
01221 nlinfo ("PATH: Contents of the alternative directory:");
01222 for (uint i = 0; i < inst->_AlternativePaths.size(); i++)
01223 {
01224 nlinfo ("PATH: '%s'", inst->_AlternativePaths[i].c_str ());
01225 }
01226 nlinfo ("PATH: ");
01227 nlinfo ("PATH: Contents of the remapped entension table:");
01228 for (uint j = 0; j < inst->_Extensions.size(); j++)
01229 {
01230 nlinfo ("PATH: '%s' -> '%s'", inst->_Extensions[j].first.c_str (), inst->_Extensions[j].second.c_str ());
01231 }
01232 nlinfo ("PATH: End of display");
01233 }
|
|
|
Return if a file is present in the lookup map. The function changes filename into lower case and removes ended spaces before searching.
Definition at line 421 of file path.cpp.
00422 {
00423 // Try to find in the map directories
00424 CPath *inst = CPath::getInstance();
00425 string str = strlwr(filename);
00426
00427 // Remove end spaces
00428 while ((!str.empty()) && (str[str.size()-1] == ' '))
00429 {
00430 str.resize (str.size()-1);
00431 }
00432
00433
00434 if (inst->_MemoryCompressed)
00435 {
00436 CMCFileEntry *pMCFE = MCfind(str);
00437 // If found in the vector, returns it
00438 if (pMCFE != NULL)
00439 return true;
00440 }
00441 else
00442 {
00443 map<string, CFileEntry>::iterator it = inst->_Files.find (str);
00444 // If found in the map, returns it
00445 if (it != inst->_Files.end())
00446 return true;
00447 }
00448
00449 return false;
00450 }
|
|
||||||||||||
|
Definition at line 177 of file path.cpp. References _Extensions, sint, and uint. Referenced by remapExtension().
|
|
|
Returns the current path of the applicated. Definition at line 504 of file path.cpp. References buffer.
00505 {
00506 char buffer [10000];
00507
00508 #ifdef NL_OS_WINDOWS
00509 return standardizePath(_getcwd(buffer, 10000), false);
00510 #else
00511 return standardizePath(getcwd(buffer, 10000), false);
00512 #endif
00513 }
|
|
||||||||||||
|
Create a list of file having the requested extension. Definition at line 87 of file path.cpp. References _Files, _MCFiles, _MemoryCompressed, NLMISC::CStaticStringMapper::get(), getInstance(), and SSMext. Referenced by loadForm().
00088 {
00089 CPath *inst = getInstance();
00090
00091 if (!inst->_MemoryCompressed)
00092 {
00093 std::map<std::string, CFileEntry>::iterator first(inst->_Files.begin()), last(inst->_Files.end());
00094
00095 if( !extension.empty() )
00096 {
00097 for (; first != last; ++ first)
00098 {
00099 string ext = inst->SSMext.get(first->second.idExt);
00100 if (ext == extension)
00101 {
00102 filenames.push_back(first->first);
00103 }
00104 }
00105 }
00106 // if extension is empty we keep all files
00107 else
00108 {
00109 for (; first != last; ++ first)
00110 {
00111 filenames.push_back(first->first);
00112 }
00113 }
00114 }
00115 else
00116 {
00117 // compressed memory version
00118 std::vector<CPath::CMCFileEntry>::iterator first(inst->_MCFiles.begin()), last(inst->_MCFiles.end());
00119
00120 if( !extension.empty() )
00121 {
00122 for (; first != last; ++ first)
00123 {
00124 string ext = inst->SSMext.get(first->idExt);
00125 if (ext == extension)
00126 {
00127 filenames.push_back(first->Name);
00128 }
00129 }
00130 }
00131 // if extension is empty we keep all files
00132 else
00133 {
00134 for (; first != last; ++ first)
00135 {
00136 filenames.push_back(first->Name);
00137 }
00138 }
00139 }
00140 }
|
|
||||||||||||
|
Get the full path based on a file/path and the current directory. Example, imagine that the current path is c: and toto is a directory getFullPath ("toto") returns "c:/temp/toto/" getFullPath ("../toto") returns "c:/temp/../toto/" getFullPath ("d:\dir\toto") returns "d:/dir/toto/" getFullPath ("\toto") returns "c:/toto/" getFullPath ("") returns "c:/temp/"
Definition at line 525 of file path.cpp. Referenced by NLMISC::CConfigFile::reparse().
00526 {
00527 string currentPath = standardizePath (getCurrentPath ());
00528 string sPath = standardizePath (path, addFinalSlash);
00529
00530 // current path
00531 if (path.empty() || sPath == "." || sPath == "./")
00532 {
00533 return currentPath;
00534 }
00535
00536 // windows full path
00537 if (path.size() >= 2 && path[1] == ':')
00538 {
00539 return sPath;
00540 }
00541
00542 if (path.size() >= 2 && (path[0] == '/' || path[0] == '\\') && (path[1] == '/' || path[1] == '\\'))
00543 {
00544 return sPath;
00545 }
00546
00547
00548 // from root
00549 if (path [0] == '/' || path[0] == '\\')
00550 {
00551 if (currentPath.size() > 2 && currentPath[1] == ':')
00552 {
00553 return currentPath.substr(0,3) + sPath.substr(1);
00554 }
00555 else
00556 {
00557 return sPath;
00558 }
00559 }
00560
00561 // default case
00562 return currentPath + sPath;
00563 }
|
|
|
Definition at line 142 of file path.cpp. Referenced by getFileList(), and isMemoryCompressed().
|
|
||||||||||||||||||||||||||||||||
|
List all files in a directory.
Definition at line 688 of file path.cpp. References NL_DISPLAY_PATH. Referenced by NL3D::CAnimationSet::loadFromFiles().
00689 {
00690 if( path.empty() )
00691 {
00692 NL_DISPLAY_PATH("PATH: CPath::getPathContent(): Empty input Path");
00693 return;
00694 }
00695
00696 #ifndef NL_OS_WINDOWS
00697 BasePathgetPathContent = CPath::standardizePath (path);
00698 #endif
00699
00700 DIR *dir = opendir (path.c_str());
00701
00702 if (dir == NULL)
00703 {
00704 NL_DISPLAY_PATH("PATH: CPath::getPathContent(%s, %d, %d, %d): could not open the directory", path.c_str(), recurse, wantDir, wantFile);
00705 return;
00706 }
00707
00708 // contains path that we have to recurs into
00709 vector<string> recursPath;
00710
00711 while (true)
00712 {
00713 dirent *de = readdir(dir);
00714 if (de == NULL)
00715 {
00716 NL_DISPLAY_PATH("PATH: CPath::getPathContent(%s, %d, %d, %d): end of directory", path.c_str(), recurse, wantDir, wantFile);
00717 break;
00718 }
00719
00720 string fn = getname (de);
00721
00722 // skip . and ..
00723 if (fn == "." || fn == "..")
00724 continue;
00725
00726 if (isdirectory(de))
00727 {
00728 // skip CVS directory
00729 if ((!showEverything) && (fn == "CVS"))
00730 {
00731 NL_DISPLAY_PATH("PATH: CPath::getPathContent(%s, %d, %d, %d): skip CVS directory", path.c_str(), recurse, wantDir, wantFile);
00732 continue;
00733 }
00734
00735 string stdName = standardizePath(standardizePath(path) + fn);
00736 if (recurse)
00737 {
00738 NL_DISPLAY_PATH("PATH: CPath::getPathContent(%s, %d, %d, %d): need to recurse into '%s'", path.c_str(), recurse, wantDir, wantFile, stdName.c_str());
00739 recursPath.push_back (stdName);
00740 }
00741
00742 if (wantDir)
00743 {
00744 NL_DISPLAY_PATH("PATH: CPath::getPathContent(%s, %d, %d, %d): adding path '%s'", path.c_str(), recurse, wantDir, wantFile, stdName.c_str());
00745 result.push_back (stdName);
00746 }
00747 }
00748 if (wantFile && isfile(de))
00749 {
00750 if ( (!showEverything) && (fn.size() >= 4 && fn.substr (fn.size()-4) == ".log"))
00751 {
00752 NL_DISPLAY_PATH("PATH: CPath::getPathContent(%s, %d, %d, %d): skip *.log files (%s)", path.c_str(), recurse, wantDir, wantFile, fn.c_str());
00753 continue;
00754 }
00755
00756 /* int lastSep = CFile::getLastSeparator(path);
00757 #ifdef NL_OS_WINDOWS
00758 char sep = lastSep == std::string::npos ? '\\'
00759 : path[lastSep];
00760 #else
00761 char sep = lastSep == std::string::npos ? '/'
00762 : path[lastSep];
00763 #endif
00764 */
00765 string stdName = standardizePath(path) + getname(de);
00766
00767
00768 NL_DISPLAY_PATH("PATH: CPath::getPathContent(%s, %d, %d, %d): adding file '%s'", path.c_str(), recurse, wantDir, wantFile, stdName.c_str());
00769 result.push_back (stdName);
00770 }
00771 }
00772
00773 closedir (dir);
00774
00775 #ifndef NL_OS_WINDOWS
00776 BasePathgetPathContent = "";
00777 #endif
00778
00779 // let s recurse
00780 for (uint i = 0; i < recursPath.size (); i++)
00781 {
00782 // Progress bar
00783 if (progressCallBack)
00784 {
00785 progressCallBack->progress ((float)i/(float)recursPath.size ());
00786 progressCallBack->pushCropedValues ((float)i/(float)recursPath.size (), (float)(i+1)/(float)recursPath.size ());
00787 }
00788
00789 getPathContent (recursPath[i], recurse, wantDir, wantFile, result, progressCallBack);
00790
00791 // Progress bar
00792 if (progressCallBack)
00793 {
00794 progressCallBack->popCropedValues ();
00795 }
00796 }
00797 }
|
|
||||||||||||||||||||
|
Definition at line 1139 of file path.cpp. Referenced by remapExtension().
01140 {
01141 NL_ALLOC_CONTEXT (MiPath);
01142 CPath *inst = CPath::getInstance();
01143 nlassert(!inst->_MemoryCompressed);
01144 // find if the file already exist
01145 map<string, CFileEntry>::iterator it = inst->_Files.find (strlwr(filename));
01146 if (it != inst->_Files.end ())
01147 {
01148 string path = inst->SSMpath.get((*it).second.idPath);
01149 if (path.find("@") != string::npos && filepath.find("@") == string::npos)
{
// if there's a file in a big file and a file in a path, the file in path wins
// replace with the new one
nlinfo ("PATH: CPath::insertFileInMap(%s, %s, %d, %s): already inserted from '%s' but special case so overide it", filename.c_str(), filepath.c_str(), remap, extension.c_str(), path.c_str());
01150 string sTmp = filepath.substr(0,filepath.rfind('/')+1);
01151 (*it).second.idPath = inst->SSMpath.add(sTmp);
01152 (*it).second.Remapped = remap;
01153 (*it).second.idExt = inst->SSMext.add(extension);
01154 (*it).second.Name = filename;
01155 }
01156 else
01157 {
01158 for(uint i = 0; i < inst->IgnoredFiles.size(); i++)
01159 {
01160 // if we don't want to display a warning, skip it
01161 if(filename == inst->IgnoredFiles[i])
01162 return;
01163 }
01164 // if the path is the same, don't warn
01165 string path2 = inst->SSMpath.get((*it).second.idPath);
01166 string sPathOnly = filepath.substr(0,filepath.rfind('@')+1);
01167 if (path2 == sPathOnly)
01168 return;
01169 nlwarning ("PATH: CPath::insertFileInMap(%s, %s, %d, %s): already inserted from '%s', skip it", filename.c_str(), filepath.c_str(), remap, extension.c_str(), path2.c_str());
01170 }
01171 }
01172 else
01173 {
01174 CFileEntry fe;
01175 fe.idExt = inst->SSMext.add(extension);
01176 fe.Remapped = remap;
01177 string sTmp;
01178 if (filepath.find("@") == string::npos)
sTmp = filepath.substr(0,filepath.rfind('/')+1);
else
sTmp = filepath.substr(0,filepath.rfind('@')+1);
fe.idPath = inst->SSMpath.add(sTmp);
fe.Name = filename;
inst->_Files.insert (make_pair(strlwr(filename), fe));
NL_DISPLAY_PATH("PATH: CPath::insertFileInMap(%s, %s, %d, %s): added", strlwr(filename).c_str(), filepath.c_str(), remap, strlwr(extension).c_str());
01179 }
01180 }
01181 |
|
|
Definition at line 215 of file path.h. References _MemoryCompressed, and getInstance().
00215 { return getInstance()->_MemoryCompressed; }
|
|
|
Load a file containing the remapped file (you must have done addsearchpath, this method use lookup) Format is remapped_name_file, real_file separators are , and Definition at line 293 of file path.cpp. References NLMISC::CIFile::eof(), file, NLMISC::CIFile::getline(), lookup(), NLMISC::CIFile::open(), remapFile(), NLMISC::removeAllUnusedChar(), and NLMISC::CIFile::setCacheFileOnOpen().
00294 {
00295 NL_ALLOC_CONTEXT (MiPath);
00296 string fullName = lookup(file, false, true, true);
00297 CIFile f;
00298 f.setCacheFileOnOpen (true);
00299
00300 if (!f.open (fullName))
00301 return;
00302
00303 char sTmp[514];
00304 string str;
00305
00306 while (!f.eof())
00307 {
00308 f.getline(sTmp, 512);
00309 str = sTmp;
00310 if (str.find(','))
00311 {
00312 removeAllUnusedChar(str);
00313 if (!str.empty())
00314 remapFile( str.substr(0,str.find(',')), str.substr(str.find(',')+1, str.size()) );
00315 }
00316 }
00317 }
|
|
||||||||||||||||||||
|
Returns the long name (path + filename) for the specified file. The directory separator is always '/'. First, the lookup() lookups in standard directories (Alternative=false). If not found, it lookups in the Alternative directories. If not found the lookup() returns empty string "" (and generate an exception if throwException is true) The filename is not case sensitive so if the real filename is "FooBAR.Jpg" and you call lookup("fOOBar.jPg"), it'll return the real filename "FooBAR.Jpg"
Definition at line 320 of file path.cpp. Referenced by NL3D::CAnimationSetUser::addAnimation(), NLSOUND::CAudioMixerUser::init(), loadForm(), loadRemappedFiles(), and NLPACS::CRetrieverBank::serial().
00321 {
00322 // If the file already contains a @, it means that a lookup already proceed and returning a big file, do nothing
00323 if (filename.find ("@") != string::npos)
{
NL_DISPLAY_PATH("PATH: CPath::lookup(%s): already found", filename.c_str());
00324 return filename;
00325 }
00326
00327 // Try to find in the map directories
00328 CPath *inst = CPath::getInstance();
00329 string str = strlwr(filename);
00330
00331 // Remove end spaces
00332 while ((!str.empty()) && (str[str.size()-1] == ' '))
00333 {
00334 str.resize (str.size()-1);
00335 }
00336
00337 map<string, string>::iterator itss = inst->_RemappedFiles.find(str);
00338 if (itss != inst->_RemappedFiles.end())
00339 str = itss->second;
00340
00341 if (inst->_MemoryCompressed)
00342 {
00343 CMCFileEntry *pMCFE = MCfind(str);
00344 // If found in the map, returns it
00345 if (pMCFE != NULL)
00346 {
00347 string fname, path = inst->SSMpath.get(pMCFE->idPath);
00348 if (pMCFE->Remapped)
00349 fname = CFile::getFilenameWithoutExtension(pMCFE->Name) + "." + inst->SSMext.get(pMCFE->idExt);
00350 else
00351 fname = pMCFE->Name;
00352
00353 NL_DISPLAY_PATH("PATH: CPath::lookup(%s): found in the map directory: '%s'", fname.c_str(), path.c_str());
00354 return path + fname;
00355 }
00356 }
00357 else // NOT memory compressed
00358 {
00359 map<string, CFileEntry>::iterator it = inst->_Files.find (str);
00360 // If found in the map, returns it
00361 if (it != inst->_Files.end())
00362 {
00363 string fname, path = inst->SSMpath.get((*it).second.idPath);
00364 if (it->second.Remapped)
00365 fname = CFile::getFilenameWithoutExtension((*it).second.Name) + "." + inst->SSMext.get((*it).second.idExt);
00366 else
00367 fname = (*it).second.Name;
00368
00369 NL_DISPLAY_PATH("PATH: CPath::lookup(%s): found in the map directory: '%s'", fname.c_str(), path.c_str());
00370 return path + fname;
00371 }
00372 }
00373
00374
00375 // Try to find in the alternative directories
00376 for (uint i = 0; i < inst->_AlternativePaths.size(); i++)
00377 {
00378 string s = inst->_AlternativePaths[i] + filename;
00379 if ( CFile::fileExists(s) )
00380 {
00381 NL_DISPLAY_PATH("PATH: CPath::lookup(%s): found in the alternative directory: '%s'", filename.c_str(), s.c_str());
00382 return s;
00383 }
00384
00385 // try with the remapping
00386 for (uint j = 0; j < inst->_Extensions.size(); j++)
00387 {
00388 if (strlwr(CFile::getExtension (filename)) == inst->_Extensions[j].second)
00389 {
00390 string rs = inst->_AlternativePaths[i] + CFile::getFilenameWithoutExtension (filename) + "." + inst->_Extensions[j].first;
00391 if ( CFile::fileExists(rs) )
00392 {
00393 NL_DISPLAY_PATH("PATH: CPath::lookup(%s): found in the alternative directory: '%s'", filename.c_str(), rs.c_str());
00394 return rs;
00395 }
00396 }
00397 }
00398 }
00399
00400 // Try to find in the current directory
00401 if ( lookupInLocalDirectory && CFile::fileExists(filename) )
00402 {
00403 NL_DISPLAY_PATH("PATH: CPath::lookup(%s): found in the current directory: '%s'", filename.c_str(), filename.c_str());
00404 return filename;
00405 }
00406
00407 // Not found
00408 if (displayWarning)
00409 {
00410 nlwarning ("PATH: CPath::lookup(%s): file not found", filename.c_str());
00411 }
00412
00413 if (throwException)
00414 throw EPathNotFound (filename);
00415
00416 return "";
00417 }
00418 |
|
||||||||||||
|
Make a path relative to another if possible, else doesn't change it.
Definition at line 1674 of file path.cpp.
01675 {
01676 // Standard path with final slash
01677 string tmp = standardizePath (basePath, true);
01678 string src = standardizePath (relativePath, true);
01679 string prefix;
01680
01681 while (1)
01682 {
01683 // Compare with relativePath
01684 if (strncmp (tmp.c_str (), src.c_str (), tmp.length ()) == 0)
01685 {
01686 // Troncate
01687 uint size = tmp.length ();
01688
01689 // Same path ?
01690 if (size == src.length ())
01691 {
01692 relativePath = ".";
01693 return true;
01694 }
01695
01696 relativePath = prefix+relativePath.substr (size, relativePath.length () - size);
01697 return true;
01698 }
01699
01700 // Too small ?
01701 if (tmp.length ()<2)
01702 break;
01703
01704 // Remove last directory
01705 uint lastPos = tmp.rfind ('/', tmp.length ()-2);
01706 uint previousPos = tmp.find ('/');
01707 if ((lastPos == previousPos) || (lastPos == string::npos))
01708 break;
01709
01710 // Troncate
01711 tmp = tmp.substr (0, lastPos+1);
01712
01713 // New prefix
01714 prefix += "../";
01715 }
01716
01717 return false;
01718 }
|
|
|
Definition at line 162 of file path.cpp. References _MCFiles, _MemoryCompressed, nlassert, and NLMISC::CPath::CMCFileComp::specialCompare().
00163 {
00164 CPath *inst = CPath::getInstance();
00165 nlassert(inst->_MemoryCompressed);
00166 vector<CMCFileEntry>::iterator it;
00167 it = lower_bound(inst->_MCFiles.begin(), inst->_MCFiles.end(), filename.c_str(), CMCFileComp());
00168 if (it != inst->_MCFiles.end())
00169 {
00170 CMCFileComp FileComp;
00171 if (FileComp.specialCompare(*it, filename.c_str()) == 0)
00172 return &(*it);
00173 }
00174 return NULL;
00175 }
|
|
|
For the moment after memoryCompress you cant addsearchpath anymore Definition at line 1235 of file path.cpp. References _AllFileNames, _MCFiles, NLMISC::CStaticStringMapper::get(), NLMISC::CPath::CFileEntry::idExt, NLMISC::CPath::CFileEntry::idPath, NLMISC::CPath::CFileEntry::Name, nlassert, NLMISC::CPath::CFileEntry::Remapped, and SSMpath.
01236 {
01237 NL_ALLOC_CONTEXT (MiPath);
01238 CPath *inst = CPath::getInstance();
01239
01240 inst->SSMext.memoryCompress();
01241 inst->SSMpath.memoryCompress();
01242 uint nDbg = inst->_Files.size();
01243 nlinfo ("PATH: Number of file : %d", nDbg);
01244 nDbg = inst->SSMext.getCount();
01245 nlinfo ("PATH: Number of different extension : %d", nDbg);
01246 nDbg = inst->SSMpath.getCount();
01247 nlinfo ("PATH: Number of different path : %d", nDbg);
01248
01249 // Convert from _Files to _MCFiles
01250 uint nSize = 0, nNb = 0;
01251 map<string,CFileEntry>::iterator it = inst->_Files.begin();
01252 while (it != inst->_Files.end())
01253 {
01254 string sTmp = inst->SSMpath.get(it->second.idPath);
01255 if ((sTmp.find('@') != string::npos) && !it->second.Remapped)
01256 {
01257 // This is a file included in a bigfile (so the name is in the bigfile manager)
01258 }
01259 else
01260 {
01261 nSize += it->second.Name.size() + 1;
01262 }
01263 nNb++;
01264 it++;
01265 }
01266
01267 inst->_AllFileNames = new char[nSize];
01268 memset(inst->_AllFileNames, 0, nSize);
01269 inst->_MCFiles.resize(nNb);
01270
01271 it = inst->_Files.begin();
01272 nSize = 0;
01273 nNb = 0;
01274 while (it != inst->_Files.end())
01275 {
01276 CFileEntry &rFE = it->second;
01277 string sTmp = inst->SSMpath.get(rFE.idPath);
01278 if ((sTmp.find('@') != string::npos) && !rFE.Remapped)
01279 {
01280 // This is a file included in a bigfile (so the name is in the bigfile manager)
01281 sTmp = sTmp.substr(0, sTmp.size()-1);
01282 inst->_MCFiles[nNb].Name = CBigFile::getInstance().getFileNamePtr(rFE.Name, sTmp);
01283 nlassert(inst->_MCFiles[nNb].Name != NULL);
01284 }
01285 else
01286 {
01287 strcpy(inst->_AllFileNames+nSize, rFE.Name.c_str());
01288 inst->_MCFiles[nNb].Name = inst->_AllFileNames+nSize;
01289 nSize += rFE.Name.size() + 1;
01290 }
01291
01292 inst->_MCFiles[nNb].idExt = rFE.idExt;
01293 inst->_MCFiles[nNb].idPath = rFE.idPath;
01294 inst->_MCFiles[nNb].Remapped = rFE.Remapped;
01295
01296 nNb++;
01297 it++;
01298 }
01299
01300 contReset(inst->_Files);
01301 inst->_MemoryCompressed = true;
01302 }
|
|
|
Definition at line 1304 of file path.cpp. References uint32.
01305 {
01306 CPath *inst = CPath::getInstance ();
01307 inst->SSMext.memoryUncompress();
01308 inst->SSMpath.memoryUncompress();
01309 inst->_MemoryCompressed = false;
01310 }
|
|
||||||||||||||||
|
Add a remapping function to allow file extension substitution.
ie: If you have a file called pic.dds and you call remapExtension("dds", "tga", true), if you call lookup("pic.tga"), it'll return "pic.dds" Definition at line 190 of file path.cpp. References _Extensions, _Files, _MemoryCompressed, file, findExtension(), NLMISC::CStaticStringMapper::get(), insertFileInMap(), NL_DISPLAY_PATH, nlassert, nlwarning, sint, SSMext, SSMpath, NLMISC::strlwr(), and uint32.
00191 {
00192 NL_ALLOC_CONTEXT (MiPath);
00193 CPath *inst = CPath::getInstance();
00194 nlassert(!inst->_MemoryCompressed);
00195
00196 string ext1lwr = strlwr (ext1);
00197 string ext2lwr = strlwr (ext2);
00198
00199 if (ext1lwr.empty() || ext2lwr.empty())
00200 {
00201 nlwarning ("PATH: CPath::remapExtension(%s, %s, %d): can't remap empty extension", ext1lwr.c_str(), ext2lwr.c_str(), substitute);
00202 }
00203
00204 if (ext1lwr == "bnp" || ext2lwr == "bnp")
00205 {
00206 nlwarning ("PATH: CPath::remapExtension(%s, %s, %d): you can't remap a big file", ext1lwr.c_str(), ext2lwr.c_str(), substitute);
00207 }
00208
00209 if (!substitute)
00210 {
00211 // remove the mapping from the mapping list
00212 sint n = inst->findExtension (ext1lwr, ext2lwr);
00213 nlassert (n != -1);
00214 inst->_Extensions.erase (inst->_Extensions.begin() + n);
00215
00216 // remove mapping in the map
00217 map<string, CFileEntry>::iterator it = inst->_Files.begin();
00218 map<string, CFileEntry>::iterator nit = it;
00219 while (it != inst->_Files.end ())
00220 {
00221 nit++;
00222 string ext = inst->SSMext.get((*it).second.idExt);
00223 if ((*it).second.Remapped && ext == ext2lwr)
00224 {
00225 inst->_Files.erase (it);
00226 }
00227 it = nit;
00228 }
00229 NL_DISPLAY_PATH("PATH: CPath::remapExtension(%s, %s, %d): extension removed", ext1lwr.c_str(), ext2lwr.c_str(), substitute);
00230 }
00231 else
00232 {
00233 sint n = inst->findExtension (ext1lwr, ext2lwr);
00234 if (n != -1)
00235 {
00236 nlwarning ("PATH: CPath::remapExtension(%s, %s, %d): remapping already set", ext1lwr.c_str(), ext2lwr.c_str(), substitute);
00237 return;
00238 }
00239
00240 // adding mapping into the mapping list
00241 inst->_Extensions.push_back (make_pair (ext1lwr, ext2lwr));
00242
00243 // adding mapping into the map
00244 vector<string> newFiles;
00245 map<string, CFileEntry>::iterator it = inst->_Files.begin();
00246 while (it != inst->_Files.end ())
00247 {
00248 string ext = inst->SSMext.get((*it).second.idExt);
00249 if (!(*it).second.Remapped && ext == ext1lwr)
00250 {
00251 // find if already exist
00252 uint32 pos = (*it).first.find_last_of (".");
00253 if (pos != string::npos)
00254 {
00255 string file = (*it).first.substr (0, pos + 1);
00256 file += ext2lwr;
00257
00258 // TODO perhaps a problem because I insert in the current map that i parcours
00259 string path = inst->SSMpath.get((*it).second.idPath);
00260 insertFileInMap (file, path+file, true, ext1lwr);
00261 }
00262 }
00263 it++;
00264 }
00265 NL_DISPLAY_PATH("PATH: CPath::remapExtension(%s, %s, %d): extension added", ext1lwr.c_str(), ext2lwr.c_str(), substitute);
00266 }
00267 }
|
|
||||||||||||
|
Add file remapping ie: If you have a file called pic.dds, and call remapFile("picture.dds", "pic.dds") calling lookup("picture.dds") will in fact call lookup("pic.dds") Definition at line 270 of file path.cpp. References _RemappedFiles, and NLMISC::strlwr(). Referenced by loadRemappedFiles().
|
|
|
Remove all search path contains in the alternative directories Definition at line 799 of file path.cpp.
00800 {
00801 CPath *inst = CPath::getInstance();
00802 inst->_AlternativePaths.clear ();
00803 NL_DISPLAY_PATH("PATH: CPath::RemoveAllAternativeSearchPath(): removed");
00804 }
|
|
|
Set the current path of the applicated. Definition at line 515 of file path.cpp.
00516 {
00517 #ifdef NL_OS_WINDOWS
00518 return _chdir(newDir) == 0;
00519 #else
00520 // todo : check this compiles under linux. Thanks (Hulud)
00521 return chdir(newDir) == 0;
00522 #endif
00523 }
|
|
|
Remplace / with \ for fucking dos process. Use only this function if can't do another way. For exemple, if you do a system("copy data/toto data/tata"); it'll not work because dos doesn't understand /. But in the majority of case, / working (it works for fopen for example) Definition at line 482 of file path.cpp. References uint.
00483 {
00484 string newPath;
00485
00486 for (uint i = 0; i < path.size(); i++)
00487 {
00488 if (path[i] == '/')
00489 newPath += '\\';
00490 // Yoyo: supress toLower. Not usefull!?!
00491 /*else if (isupper(path[i]))
00492 newPath += tolower(path[i]);*/
00493 else
00494 newPath += path[i];
00495 }
00496
00497 if (CFile::isExists(path) && CFile::isDirectory(path) && newPath[newPath.size()-1] != '\\')
00498 newPath += '\\';
00499
00500 return newPath;
00501 }
|
|
||||||||||||
|
Take a path and put it in the portable format and add a terminated / if needed ie: "C:\\Game/dir1" will become "C:/Game/dir1/" or "C:/Game/dir1" if addFinalSlash is false Definition at line 452 of file path.cpp. References uint. Referenced by NLMISC::CConfigFile::reparse().
00453 {
00454 string newPath;
00455 // check empty path
00456 if (path.empty()) return "";
00457
00458 // don't transform the first \\ for windows network path
00459 // if (path.size() >= 2 && path[0] == '\\' && path[1] == '\\')
00460 // {
00461 // newPath += "\\\\";
00462 // i = 2;
00463 // }
00464
00465 for (uint i = 0; i < path.size(); i++)
00466 {
00467 // don't transform the first \\ for windows network path
00468 if (path[i] == '\\')
00469 newPath += '/';
00470 else
00471 newPath += path[i];
00472 }
00473
00474 // add terminal slash
00475 if (addFinalSlash && newPath[path.size()-1] != '/')
00476 newPath += '/';
00477
00478 return newPath;
00479 }
|
|
|
Definition at line 267 of file path.h. Referenced by memoryCompress(). |
|
|
|
|
|
first ext1, second ext2 (ext1 could remplace ext2)
Definition at line 302 of file path.h. Referenced by findExtension(), and remapExtension(). |
|
|
Definition at line 254 of file path.h. Referenced by clearMap(), getFileList(), and remapExtension(). |
|
|
|
|
|
Definition at line 270 of file path.h. Referenced by getFileList(), MCfind(), and memoryCompress(). |
|
|
Definition at line 239 of file path.h. Referenced by clearMap(), CPath(), getFileList(), isMemoryCompressed(), MCfind(), and remapExtension(). |
|
|
Definition at line 233 of file path.h. Referenced by remapFile(). |
|
|
|
|
|
Definition at line 240 of file path.h. Referenced by getFileList(), and remapExtension(). |
|
|
Definition at line 241 of file path.h. Referenced by memoryCompress(), and remapExtension(). |
1.3.6