| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: filefn.h
- // Purpose: interface of wxPathList and file functions
- // Author: wxWidgets team
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- /**
- @class wxPathList
- The path list is a convenient way of storing a number of directories, and
- when presented with a filename without a directory, searching for an
- existing file in those directories.
- Be sure to look also at wxStandardPaths if you only want to search files in
- some standard paths.
- @library{wxbase}
- @category{file}
- @see wxArrayString, wxStandardPaths, wxFileName
- */
- class wxPathList : public wxArrayString
- {
- public:
- /**
- Standard constructor.
- */
- wxPathList();
- /**
- Constructs the object calling the Add() function.
- */
- wxPathList(const wxArrayString& arr);
- /**
- Adds the given directory to the path list, if the @a path is not already in the list.
- If the path cannot be normalized for some reason, it returns @false.
- The @a path is always considered to be a directory but no existence checks will be
- done on it (because if it doesn't exist, it could be created later and thus result a
- valid path when FindValidPath() is called).
- @note if the given path is relative, it won't be made absolute before adding it
- (this is why FindValidPath() may return relative paths).
- */
- bool Add(const wxString& path);
- /**
- Adds all elements of the given array as paths.
- */
- void Add(const wxArrayString& arr);
- /**
- Finds the value of the given environment variable, and adds all paths
- to the path list.
- Useful for finding files in the @c PATH variable, for example.
- */
- void AddEnvList(const wxString& env_variable);
- /**
- Given a full filename (with path), calls Add() with the path of the file.
- */
- bool EnsureFileAccessible(const wxString& filename);
- /**
- Like FindValidPath() but this function always returns an absolute path
- (eventually prepending the current working directory to the value returned
- wxPathList::FindValidPath()) or an empty string.
- */
- wxString FindAbsoluteValidPath(const wxString& file) const;
- /**
- Searches the given file in all paths stored in this class.
- The first path which concatenated to the given string points to an existing
- file (see wxFileExists()) is returned.
- If the file wasn't found in any of the stored paths, an empty string is returned.
- The given string must be a file name, eventually with a path prefix (if the path
- prefix is absolute, only its name will be searched); i.e. it must not end with
- a directory separator (see wxFileName::GetPathSeparator) otherwise an assertion
- will fail.
- The returned path may be relative to the current working directory.
- Note in fact that wxPathList can be used to store both relative and absolute
- paths so that if you added relative paths, then the current working directory
- (see wxGetCwd() and wxSetWorkingDirectory()) may affect the value returned
- by this function!
- */
- wxString FindValidPath(const wxString& file) const;
- };
- // ============================================================================
- // Global functions/macros
- // ============================================================================
- /** @addtogroup group_funcmacro_file */
- //@{
- /**
- A special return value of many wxWidgets classes to indicate that
- an invalid offset was given.
- */
- const int wxInvalidOffset = -1;
- /**
- The type used to store and provide byte offsets or byte sizes for files or streams.
- This type is usually just a synonym for @c off_t but can be defined as
- @c wxLongLong_t if @c wxHAS_HUGE_FILES is defined but @c off_t is only 32
- bits.
- */
- typedef off_t wxFileOffset;
- /**
- Under Unix this macro changes the current process umask to the given value,
- unless it is equal to -1 in which case nothing is done, and restores it to
- the original value on scope exit. It works by declaring a variable which
- sets umask to @a mask in its constructor and restores it in its destructor.
- Under other platforms this macro expands to nothing.
- @header{wx/filefn.h}
- */
- #define wxCHANGE_UMASK(mask)
- /**
- This function returns the total number of bytes and number of free bytes on
- the disk containing the directory @a path (it should exist). Both @a total
- and @a free parameters may be @NULL if the corresponding information is not
- needed.
- @since 2.3.2
- @note The generic Unix implementation depends on the system having the
- @c statfs() or @c statvfs() function.
- @return @true on success, @false if an error occurred (for example, the
- directory doesn’t exist).
- @header{wx/filefn.h}
- */
- bool wxGetDiskSpace(const wxString& path,
- wxLongLong total = NULL,
- wxLongLong free = NULL);
- /**
- Returns the Windows directory under Windows; other platforms return an
- empty string.
- @header{wx/filefn.h}
- */
- wxString wxGetOSDirectory();
- /**
- Parses the @a wildCard, returning the number of filters. Returns 0 if none
- or if there's a problem.
- The arrays will contain an equal number of items found before the error. On
- platforms where native dialogs handle only one filter per entry, entries in
- arrays are automatically adjusted. @a wildCard is in the form:
- @code
- "All files (*)|*|Image Files (*.jpeg *.png)|*.jpg;*.png"
- @endcode
- @header{wx/filefn.h}
- */
- int wxParseCommonDialogsFilter(const wxString& wildCard,
- wxArrayString& descriptions,
- wxArrayString& filters);
- /**
- Converts a DOS to a Unix filename by replacing backslashes with forward
- slashes.
- @deprecated
- Construct a wxFileName with wxPATH_DOS and then use
- wxFileName::GetFullPath(wxPATH_UNIX) instead.
- @header{wx/filefn.h}
- */
- void wxDos2UnixFilename(wxChar* s);
- /**
- Converts a Unix to a DOS filename by replacing forward slashes with
- backslashes.
- @deprecated
- Construct a wxFileName with wxPATH_UNIX and then use
- wxFileName::GetFullPath(wxPATH_DOS) instead.
- @header{wx/filefn.h}
- */
- void wxUnix2DosFilename(wxChar* s);
- /**
- Returns @true if @a dirname exists and is a directory.
- @header{wx/filefn.h}
- */
- bool wxDirExists(const wxString& dirname);
- /**
- @deprecated
- This function is obsolete, please use wxFileName::SplitPath() instead.
- This function splits a full file name into components: the path (including
- possible disk/drive specification under Windows), the base name, and the
- extension. Any of the output parameters (@a path, @a name or @a ext) may be
- @NULL if you are not interested in the value of a particular component.
- wxSplitPath() will correctly handle filenames with both DOS and Unix path
- separators under Windows, however it will not consider backslashes as path
- separators under Unix (where backslash is a valid character in a filename).
- On entry, @a fullname should be non-@NULL (it may be empty though).
- On return, @a path contains the file path (without the trailing separator),
- @a name contains the file name and @c ext contains the file extension
- without leading dot. All three of them may be empty if the corresponding
- component is. The old contents of the strings pointed to by these
- parameters will be overwritten in any case (if the pointers are not @NULL).
- @header{wx/filefn.h}
- */
- void wxSplitPath(const wxString& fullname,
- wxString* path,
- wxString* name,
- wxString* ext);
- /**
- Returns time of last modification of given file.
- The function returns <tt>(time_t)-1</tt> if an error occurred (e.g. file
- not found).
- @header{wx/filefn.h}
- */
- time_t wxFileModificationTime(const wxString& filename);
- /**
- Renames @a file1 to @e file2, returning @true if successful.
- If @a file2 is a directory, @a file1 is moved into it (@a overwrite is
- ignored in this case). Otherwise, if @a file2 is an existing file, it is
- overwritten if @a overwrite is @true (default) and the function fails if @a
- overwrite is @false.
- @header{wx/filefn.h}
- */
- bool wxRenameFile(const wxString& file1,
- const wxString& file2,
- bool overwrite = true);
- /**
- Copies @a file1 to @e file2, returning @true if successful. If @a overwrite
- parameter is @true (default), the destination file is overwritten if it
- exists, but if @a overwrite is @false, the functions fails in this case.
- This function supports resources forks under Mac OS.
- @header{wx/filefn.h}
- */
- bool wxCopyFile(const wxString& file1,
- const wxString& file2,
- bool overwrite = true);
- /**
- Returns @true if the file exists and is a plain file.
- @header{wx/filefn.h}
- */
- bool wxFileExists(const wxString& filename);
- /**
- Returns @true if the @a pattern matches the @e text; if @a dot_special is
- @true, filenames beginning with a dot are not matched with wildcard
- characters.
- @see wxIsWild()
- @header{wx/filefn.h}
- */
- bool wxMatchWild(const wxString& pattern,
- const wxString& text,
- bool dot_special);
- /**
- @deprecated This function is deprecated, use wxGetCwd() instead.
- Copies the current working directory into the buffer if supplied, or copies
- the working directory into new storage (which you must delete yourself) if
- the buffer is @NULL.
- @a sz is the size of the buffer if supplied.
- @header{wx/filefn.h}
- */
- wxString wxGetWorkingDirectory(char* buf = NULL, int sz = 1000);
- /**
- Returns the directory part of the filename.
- @header{wx/filefn.h}
- */
- wxString wxPathOnly(const wxString& path);
- /**
- Returns @true if the pattern contains wildcards.
- @see wxMatchWild()
- @header{wx/filefn.h}
- */
- bool wxIsWild(const wxString& pattern);
- /**
- Returns @true if the argument is an absolute filename, i.e.\ with a slash
- or drive name at the beginning.
- @header{wx/filefn.h}
- */
- bool wxIsAbsolutePath(const wxString& filename);
- /**
- Returns a string containing the current (or working) directory.
- @header{wx/filefn.h}
- */
- wxString wxGetCwd();
- /**
- Sets the current working directory, returning @true if the operation
- succeeded. Under MS Windows, the current drive is also changed if @a dir
- contains a drive specification.
- @header{wx/filefn.h}
- */
- bool wxSetWorkingDirectory(const wxString& dir);
- /**
- Concatenates @a file1 and @a file2 to @e file3, returning @true if
- successful.
- @header{wx/filefn.h}
- */
- bool wxConcatFiles(const wxString& file1,
- const wxString& file2,
- const wxString& file3);
- /**
- Removes @e file, returning @true if successful.
- @header{wx/filefn.h}
- */
- bool wxRemoveFile(const wxString& file);
- /**
- File permission bit names.
- We define these constants in wxWidgets because S_IREAD &c are not standard.
- However, we do assume that the values correspond to the Unix umask bits.
- */
- enum wxPosixPermissions
- {
- /// Standard POSIX names for these permission flags with "wx" prefix.
- //@{
- wxS_IRUSR = 00400,
- wxS_IWUSR = 00200,
- wxS_IXUSR = 00100,
- wxS_IRGRP = 00040,
- wxS_IWGRP = 00020,
- wxS_IXGRP = 00010,
- wxS_IROTH = 00004,
- wxS_IWOTH = 00002,
- wxS_IXOTH = 00001,
- //@}
- /// Longer but more readable synonyms for the constants above.
- //@{
- wxPOSIX_USER_READ = wxS_IRUSR,
- wxPOSIX_USER_WRITE = wxS_IWUSR,
- wxPOSIX_USER_EXECUTE = wxS_IXUSR,
- wxPOSIX_GROUP_READ = wxS_IRGRP,
- wxPOSIX_GROUP_WRITE = wxS_IWGRP,
- wxPOSIX_GROUP_EXECUTE = wxS_IXGRP,
- wxPOSIX_OTHERS_READ = wxS_IROTH,
- wxPOSIX_OTHERS_WRITE = wxS_IWOTH,
- wxPOSIX_OTHERS_EXECUTE = wxS_IXOTH,
- //@}
- /// Default mode for the new files: allow reading/writing them to everybody but
- /// the effective file mode will be set after ANDing this value with umask and
- /// so won't include wxS_IW{GRP,OTH} for the default 022 umask value
- wxS_DEFAULT = (wxPOSIX_USER_READ | wxPOSIX_USER_WRITE | \
- wxPOSIX_GROUP_READ | wxPOSIX_GROUP_WRITE | \
- wxPOSIX_OTHERS_READ | wxPOSIX_OTHERS_WRITE),
- /// Default mode for the new directories (see wxFileName::Mkdir): allow
- /// reading/writing/executing them to everybody, but just like wxS_DEFAULT
- /// the effective directory mode will be set after ANDing this value with umask
- wxS_DIR_DEFAULT = (wxPOSIX_USER_READ | wxPOSIX_USER_WRITE | wxPOSIX_USER_EXECUTE | \
- wxPOSIX_GROUP_READ | wxPOSIX_GROUP_WRITE | wxPOSIX_GROUP_EXECUTE | \
- wxPOSIX_OTHERS_READ | wxPOSIX_OTHERS_WRITE | wxPOSIX_OTHERS_EXECUTE)
- };
- /**
- Makes the directory @a dir, returning @true if successful.
- @a perm is the access mask for the directory for the systems on which it is
- supported (Unix) and doesn't have any effect on the other ones.
- @header{wx/filefn.h}
- */
- bool wxMkdir(const wxString& dir, int perm = wxS_DIR_DEFAULT);
- /**
- Removes the directory @a dir, returning @true if successful. Does not work
- under VMS.
- The @a flags parameter is reserved for future use.
- @note There is also a wxRmDir() function which simply wraps the standard
- POSIX @c rmdir() function and so return an integer error code instead
- of a boolean value (but otherwise is currently identical to
- wxRmdir()), don't confuse these two functions.
- @header{wx/filefn.h}
- */
- bool wxRmdir(const wxString& dir, int flags = 0);
- /**
- Returns the next file that matches the path passed to wxFindFirstFile().
- See wxFindFirstFile() for an example.
- @header{wx/filefn.h}
- */
- wxString wxFindNextFile();
- /**
- This function does directory searching; returns the first file that matches
- the path @a spec, or the empty string. Use wxFindNextFile() to get the next
- matching file. Neither will report the current directory "." or the parent
- directory "..".
- @warning As of 2.5.2, these functions are not thread-safe! (they use static
- variables). You probably want to use wxDir::GetFirst() or
- wxDirTraverser instead.
- @a spec may contain wildcards.
- @a flags may be wxDIR for restricting the query to directories, wxFILE for
- files or zero for either.
- For example:
- @code
- wxString f = wxFindFirstFile("/home/project/*.*");
- while ( !f.empty() )
- {
- ...
- f = wxFindNextFile();
- }
- @endcode
- @header{wx/filefn.h}
- */
- wxString wxFindFirstFile(const wxString& spec, int flags = 0);
- /**
- Parameter indicating how file offset should be interpreted.
- This is used by wxFFile::Seek() and wxFile::Seek().
- @header{wx/filefn.h}
- */
- enum wxSeekMode
- {
- wxFromStart, ///< Seek from the file beginning.
- wxFromCurrent, ///< Seek from the current position.
- wxFromEnd ///< Seek from end of the file.
- };
- /**
- File kind enumerations returned from wxGetFileKind().
- Also used by wxFFile::GetKind() and wxFile::GetKind().
- @header{wx/filefn.h}
- */
- enum wxFileKind
- {
- wxFILE_KIND_UNKNOWN, ///< Unknown file kind, or unable to determine
- wxFILE_KIND_DISK, ///< A file supporting seeking to arbitrary offsets
- wxFILE_KIND_TERMINAL, ///< A tty
- wxFILE_KIND_PIPE ///< A pipe
- };
- //@}
- /** @addtogroup group_funcmacro_file */
- //@{
- /**
- Returns the type of an open file. Possible return values are enumerations
- of ::wxFileKind.
- @header{wx/filefn.h}
- */
- wxFileKind wxGetFileKind(int fd);
- wxFileKind wxGetFileKind(FILE* fp);
- //@}
- /** @addtogroup group_funcmacro_file */
- //@{
- /**
- @deprecated
- This function is obsolete, please use wxFileName::SplitPath() instead.
- Returns the filename for a full path. The second form returns a pointer to
- temporary storage that should not be deallocated.
- @header{wx/filefn.h}
- */
- wxString wxFileNameFromPath(const wxString& path);
- char* wxFileNameFromPath(char* path);
- //@}
- /** @addtogroup group_funcmacro_file */
- //@{
- /**
- @deprecated
- This function is obsolete, please use wxFileName::CreateTempFileName() instead.
- @header{wx/filefn.h}
- */
- char* wxGetTempFileName(const wxString& prefix, char* buf = NULL);
- bool wxGetTempFileName(const wxString& prefix, wxString& buf);
- //@}
|