/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield * * This library is open source and may be redistributed and/or modified under * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or * (at your option) any later version. The full license is in LICENSE file * included with this distribution, and on the openscenegraph.org website. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * OpenSceneGraph Public License for more details. */ #ifndef OSGDB_FILEUTILS #define OSGDB_FILEUTILS 1 #include #include #include #include #include namespace osgDB { enum CaseSensitivity { CASE_SENSITIVE, CASE_INSENSITIVE }; enum FileType { FILE_NOT_FOUND, REGULAR_FILE, DIRECTORY }; // Overload of the standard fopen function. If OSG_USE_UTF8_FILENAME is defined, // filename will be expanded from UTF8 to UTF16 and _wfopen will be called. extern OSGDB_EXPORT FILE* fopen(const char* filename, const char* mode); // Make a new directory. Returns true if directory exists or was created. extern OSGDB_EXPORT bool makeDirectory( const std::string &directoryPath ); // Make a new directory for a given file. extern OSGDB_EXPORT bool makeDirectoryForFile( const std::string &filePath ); /** return true if a file exists. */ extern OSGDB_EXPORT bool fileExists(const std::string& filename); /** return type of file. */ extern OSGDB_EXPORT FileType fileType(const std::string& filename); /** find specified file in specified file path.*/ extern OSGDB_EXPORT std::string findFileInPath(const std::string& filename, const FilePathList& filePath,CaseSensitivity caseSensitivity=CASE_SENSITIVE); /** return the directory/filename of a file if its is contained within specified directory. * return "" if directory does not contain file. If caseInsensitive is set to true then * a case insensitive comparison is used to compare fileName to directory contents. * This is useful when unix programs attempt read case insensitive windows filenames. */ extern OSGDB_EXPORT std::string findFileInDirectory(const std::string& fileName,const std::string& dirName,CaseSensitivity caseSensitivity=CASE_SENSITIVE); /** simple list of names to represent a directory's contents. */ typedef std::vector DirectoryContents; /** return the contents of a directory. * returns an empty array on any error.*/ extern OSGDB_EXPORT DirectoryContents getDirectoryContents(const std::string& dirName); inline void setDataFilePathList(const FilePathList& filepath) { osgDB::Registry::instance()->setDataFilePathList(filepath); } inline void setDataFilePathList(const std::string& paths) { osgDB::Registry::instance()->setDataFilePathList(paths); } inline FilePathList& getDataFilePathList() { return osgDB::Registry::instance()->getDataFilePathList(); } /** Search for specified file in file system, checking the DataFilePathList for possible paths, * returning the full path of the first valid file found, return an empty string if no string is found. */ extern OSGDB_EXPORT std::string findDataFile(const std::string& filename,CaseSensitivity caseSensitivity=CASE_SENSITIVE); /** Search for specified file in file system, checking first the database path set in the Options structure, then the DataFilePathList for possible paths, * returning the full path of the first valid file found, return an empty string if no string is found. */ extern OSGDB_EXPORT std::string findDataFile(const std::string& filename,const ReaderWriter::Options* options, CaseSensitivity caseSensitivity=CASE_SENSITIVE); inline void setLibraryFilePathList(const FilePathList& filepaths) { osgDB::Registry::instance()->setLibraryFilePathList(filepaths); } inline void setLibraryFilePathList(const std::string& paths) { osgDB::Registry::instance()->setLibraryFilePathList(paths); } inline FilePathList& getLibraryFilePathList() { return osgDB::Registry::instance()->getLibraryFilePathList(); } extern OSGDB_EXPORT std::string findLibraryFile(const std::string& filename,CaseSensitivity caseSensitivity=CASE_SENSITIVE); /** convert a string containing a list of paths delimited either with ';' (Windows) or ':' (All other platforms) into FilePath representation.*/ extern OSGDB_EXPORT void convertStringPathIntoFilePathList(const std::string& paths,FilePathList& filepath); extern OSGDB_EXPORT void appendPlatformSpecificLibraryFilePaths(FilePathList& filepath); extern OSGDB_EXPORT void appendPlatformSpecificResourceFilePaths(FilePathList& filepath); } #endif