#ifndef MP4V2_PLATFORM_IO_FILESYSTEM_H #define MP4V2_PLATFORM_IO_FILESYSTEM_H namespace mp4v2 { namespace platform { namespace io { /////////////////////////////////////////////////////////////////////////////// /// /// General file-system abstraction. /// /// FileSystem abstracts operations on files and directories. /// /////////////////////////////////////////////////////////////////////////////// class MP4V2_EXPORT FileSystem { public: static string DIR_SEPARATOR; //!< separator string used in file pathnames static string PATH_SEPARATOR; //!< separator string used in search-paths /////////////////////////////////////////////////////////////////////////// //! //! Query file presence. //! Check if name exists. //! @param name filename to query. //! On Windows, this should be a UTF-8 encoded string. //! On other platforms, it should be an 8-bit encoding that is //! appropriate for the platform, locale, file system, etc. //! (prefer to use UTF-8 when possible). //! @return true if present, false otherwise. //! /////////////////////////////////////////////////////////////////////////// static bool exists( std::string name ); /////////////////////////////////////////////////////////////////////////// //! //! Query directory type. //! Check if name exists and is a directory. //! @param name pathname to query. //! On Windows, this should be a UTF-8 encoded string. //! On other platforms, it should be an 8-bit encoding that is //! appropriate for the platform, locale, file system, etc. //! (prefer to use UTF-8 when possible). //! @return true if directory, false otherwise. //! /////////////////////////////////////////////////////////////////////////// static bool isDirectory( std::string name ); /////////////////////////////////////////////////////////////////////////// //! //! Query file type. //! Check if name exists and is a file. //! On Windows, this should be a UTF-8 encoded string. //! On other platforms, it should be an 8-bit encoding that is //! appropriate for the platform, locale, file system, etc. //! (prefer to use UTF-8 when possible). //! @param name filename to query. //! @return true if file, false otherwise. //! /////////////////////////////////////////////////////////////////////////// static bool isFile( std::string name ); /////////////////////////////////////////////////////////////////////////// //! //! Query file size. //! Check if name exists and is a file. //! @param name filename to query. //! On Windows, this should be a UTF-8 encoded string. //! On other platforms, it should be an 8-bit encoding that is //! appropriate for the platform, locale, file system, etc. //! (prefer to use UTF-8 when possible). //! @param size output indicating file size in bytes. //! @return true on failure, false on success. //! /////////////////////////////////////////////////////////////////////////// static bool getFileSize( std::string name, File::Size& size ); /////////////////////////////////////////////////////////////////////////// //! //! Rename file or directory. //! //! Rename oldname to newname. //! If newname exists, it is first removed. //! Both oldname and newname must be of the same type; //! that is, both must be either files or directories and must reside on //! the same filesystem. //! //! @param oldname existing pathname to rename. //! On Windows, this should be a UTF-8 encoded string. //! On other platforms, it should be an 8-bit encoding that is //! appropriate for the platform, locale, file system, etc. //! (prefer to use UTF-8 when possible). //! @param newname new pathname. //! On Windows, this should be a UTF-8 encoded string. //! On other platforms, it should be an 8-bit encoding that is //! appropriate for the platform, locale, file system, etc. //! (prefer to use UTF-8 when possible). //! //! @return true on failure, false on success. //! /////////////////////////////////////////////////////////////////////////// static bool rename( std::string oldname, std::string newname ); /////////////////////////////////////////////////////////////////////////// //! //! Generate temporary pathname. //! //! @param name output containing generated pathname. //! @param dir relative or absolute directory of pathname. //! @param prefix text prepended to base pathname. //! @param suffix text appended to base pathname. //! /////////////////////////////////////////////////////////////////////////// static void pathnameTemp( string& name, string dir = ".", string prefix = "tmp", string suffix = "" ); /////////////////////////////////////////////////////////////////////////// //! //! Cleanup pathname. //! //! Redundant (repeating) directory-separators are folded into a single //! directory-separator. //! //! Redundant /./ are folded into a single directory-separator. //! //! @param name pathname to modify. //! /////////////////////////////////////////////////////////////////////////// static void pathnameCleanup( string& name ); #if 0 TODO-KB: implement /////////////////////////////////////////////////////////////////////////// //! //! Remove everything after the last directory component. //! //! A pathname cleanup is always performed. See pathnameCleanup(). //! If no directory component is present then "." is assumed. //! //! @param name pathname to modify. //! @param trailing when true all results are suffixed with exactly one //! directory-separator, otherwise the result is guaranteed to not //! end in a directory-separator. //! /////////////////////////////////////////////////////////////////////////// static void pathnameOnlyDirectory( string& name, bool trailing = true ); /////////////////////////////////////////////////////////////////////////// //! //! Remove everything except the file component of pathname. //! //! A pathname cleanup is always performed. See pathnameCleanup(). //! If no file component exists then an empty-string is output. //! A file component may include an extension. //! //! @param name pathname to modify. //! /////////////////////////////////////////////////////////////////////////// static void pathnameOnlyFile( string& name ); /////////////////////////////////////////////////////////////////////////// //! //! Remove everything except file basename. //! //! A pathname cleanup is always performed. See pathnameCleanup(). //! A basename is considered to be everything before the last '.' //! in the file component of a pathname. //! If no file extension exists then an empty-string is output. //! //! @param name pathname to modify. //! /////////////////////////////////////////////////////////////////////////// static void pathnameOnlyBasename( string& name ); #endif /////////////////////////////////////////////////////////////////////////// //! //! Remove everything except file extension. //! //! A pathname cleanup is always performed. See pathnameCleanup(). //! A file extension is considered to everything after //! the last '.' in the file component of a pathname. //! If no file extension exists then an empty-string is output. //! //! @param name pathname to modify. //! /////////////////////////////////////////////////////////////////////////// static void pathnameOnlyExtension( string& name ); /////////////////////////////////////////////////////////////////////////// //! //! Remove file extension from pathname. //! //! A pathname cleanup is always performed. See pathnameCleanup(). //! A file extension is considered to everything after //! the last '.' in the file component of a pathname. //! The last '.' is also removed. //! //! @param name pathname to modify. //! /////////////////////////////////////////////////////////////////////////// static void pathnameStripExtension( string& name ); }; /////////////////////////////////////////////////////////////////////////////// }}} // namespace mp4v2::platform::io #endif // MP4V2_PLATFORM_IO_FILESYSTEM_H