root/OpenSceneGraph/trunk/include/osgDB/FileUtils @ 10818

Revision 10818, 4.8 kB (checked in by robert, 3 years ago)

From Chris Hanson, " Add support for requesting and setting the current directory (a la getcwd/chdir) via a
C++-friendly string-class API.

Prevent osgDB::concatPaths from faulting if the supplied "left" path string is empty."

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
2 *
3 * This library is open source and may be redistributed and/or modified under 
4 * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
5 * (at your option) any later version.  The full license is in LICENSE file
6 * included with this distribution, and on the openscenegraph.org website.
7 *
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 * OpenSceneGraph Public License for more details.
12*/
13
14#ifndef OSGDB_FILEUTILS
15#define OSGDB_FILEUTILS 1
16
17#include <osgDB/Registry>
18
19#include <vector>
20#include <deque>
21#include <string>
22#include <stdio.h>
23
24namespace osgDB {
25
26enum FileType
27{
28    FILE_NOT_FOUND,
29    REGULAR_FILE,
30    DIRECTORY
31};
32
33// Overload of the standard fopen function. If OSG_USE_UTF8_FILENAME is defined,
34// filename will be expanded from UTF8 to UTF16 and _wfopen will be called.
35extern OSGDB_EXPORT FILE* fopen(const char* filename, const char* mode);
36
37// Make a new directory.  Returns true if directory exists or was created.
38extern OSGDB_EXPORT bool makeDirectory( const std::string &directoryPath );
39
40// Make a new directory for a given file.
41extern OSGDB_EXPORT bool makeDirectoryForFile( const std::string &filePath );
42   
43// Get current working directory.
44extern OSGDB_EXPORT std::string getCurrentWorkingDirectory( void );
45
46// Set current working directory.
47extern OSGDB_EXPORT bool setCurrentWorkingDirectory( const std::string &newCurrentWorkingDirectory );
48
49
50/** return true if a file exists. */
51extern OSGDB_EXPORT bool fileExists(const std::string& filename);
52
53/** return type of file. */
54extern OSGDB_EXPORT FileType fileType(const std::string& filename);
55
56/** find specified file in specified file path.*/
57extern OSGDB_EXPORT std::string findFileInPath(const std::string& filename, const FilePathList& filePath,CaseSensitivity caseSensitivity=CASE_SENSITIVE);
58
59/** return the directory/filename of a file if its is contained within specified directory.
60  * return "" if directory does not contain file.  If caseInsensitive is set to true then
61  * a case insensitive comparison is used to compare fileName to directory contents.
62  * This is useful when unix programs attempt read case insensitive windows filenames.
63  */
64extern OSGDB_EXPORT std::string findFileInDirectory(const std::string& fileName,const std::string& dirName,CaseSensitivity caseSensitivity=CASE_SENSITIVE);
65
66/** simple list of names to represent a directory's contents. */
67typedef std::vector<std::string> DirectoryContents;
68
69/** return the contents of a directory.
70  * returns an empty array on any error.*/
71extern OSGDB_EXPORT DirectoryContents getDirectoryContents(const std::string& dirName);
72
73
74
75inline void setDataFilePathList(const FilePathList& filepath) { osgDB::Registry::instance()->setDataFilePathList(filepath); }
76
77inline void setDataFilePathList(const std::string& paths) { osgDB::Registry::instance()->setDataFilePathList(paths); }
78
79inline FilePathList& getDataFilePathList() { return osgDB::Registry::instance()->getDataFilePathList(); }
80
81/** Search for specified file in file system, checking the DataFilePathList for possible paths,
82  * returning the full path of the first valid file found, return an empty string if no string is found.
83  */
84extern OSGDB_EXPORT std::string findDataFile(const std::string& filename,CaseSensitivity caseSensitivity=CASE_SENSITIVE);
85
86/** Search for specified file in file system, checking first the database path set in the Options structure, then the DataFilePathList for possible paths,
87  * returning the full path of the first valid file found, return an empty string if no string is found.
88  */
89extern OSGDB_EXPORT std::string findDataFile(const std::string& filename,const Options* options, CaseSensitivity caseSensitivity=CASE_SENSITIVE);
90
91inline void setLibraryFilePathList(const FilePathList& filepaths) { osgDB::Registry::instance()->setLibraryFilePathList(filepaths); }
92
93inline void setLibraryFilePathList(const std::string& paths) { osgDB::Registry::instance()->setLibraryFilePathList(paths); }
94
95inline FilePathList& getLibraryFilePathList() { return osgDB::Registry::instance()->getLibraryFilePathList(); }
96
97extern OSGDB_EXPORT std::string findLibraryFile(const std::string& filename,CaseSensitivity caseSensitivity=CASE_SENSITIVE);
98
99/** convert a string containing a list of paths delimited either with ';' (Windows) or ':' (All other platforms) into FilePath representation.*/
100extern OSGDB_EXPORT void convertStringPathIntoFilePathList(const std::string& paths,FilePathList& filepath);
101
102extern OSGDB_EXPORT void appendPlatformSpecificLibraryFilePaths(FilePathList& filepath);
103extern OSGDB_EXPORT void appendPlatformSpecificResourceFilePaths(FilePathList& filepath);
104
105}
106
107#endif
Note: See TracBrowser for help on using the browser.