You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
216 lines
8.5 KiB
216 lines
8.5 KiB
#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 <b>name</b> 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 <b>name</b> 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 <b>name</b> 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 <b>name</b> 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 <b>oldname</b> to <b>newname</b>.
|
|
//! If <b>newname</b> exists, it is first removed.
|
|
//! Both <b>oldname</b> and <b>newname</b> 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 <b>after</b>
|
|
//! 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 <b>after</b>
|
|
//! 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
|