]> git.lyx.org Git - lyx.git/blobdiff - src/support/FileName.h
TR1: check in cmake for GCC version, fallback in checktr1.h for other build systems...
[lyx.git] / src / support / FileName.h
index 51c149ff9e5d708396096b30213fa89682c2730f..23e6fd0d408a9e6625b7ac7589676ba119951657 100644 (file)
@@ -12,6 +12,7 @@
 #ifndef FILENAME_H
 #define FILENAME_H
 
+#include "support/os.h"
 #include "support/strfwd.h"
 
 #include <ctime>
@@ -63,7 +64,7 @@ public:
        static bool isAbsolute(std::string const & name);
 
        /// get the absolute file name in UTF-8 encoding
-       std::string absFilename() const;
+       std::string absFileName() const;
 
        /** returns an absolute pathname (whose resolution does not involve
          * '.', '..', or symbolic links) in UTF-8 encoding
@@ -72,12 +73,29 @@ public:
 
        /**
         * Get the file name in the encoding used by the file system.
-        * Only use this for accessing the file, e.g. with an fstream.
+        * Only use this for passing file names to external commands.
+        * Warning: On Windows this is not unicode safe and should not
+        * be used for accessing files with an fstream, for example.
         */
        std::string toFilesystemEncoding() const;
 
+       /**
+        * Get the file name in a unicode safe encoding used by the file system.
+        * Only use this for accessing the file with standard I/O functions
+        * non explicitly unicode aware, e.g. with an fstream. This can also
+        * be used for passing file names to external commands, but only if
+        * you are sure that the stem of the name will not be used for
+        * producing derivative files. For example, don't use this for passing
+        * file names to LaTeX, as the stem of the .dvi file will not correspond
+        * to the stem of the .tex file anymore.
+        * Use os::CREATE if the file is to be accessed for writing.
+        */
+       std::string toSafeFilesystemEncoding(os::file_access how = os::EXISTING) const;
+
        /// returns true if the file exists
        bool exists() const;
+       /// refreshes the file info
+       void refresh() const;
        /// \return true if this object points to a symbolic link.
        bool isSymLink() const;
        /// \return true if the file is empty.
@@ -245,9 +263,9 @@ public:
        ///
        bool saveAbsPath() const { return save_abs_path_; }
        /// \param buffer_path if empty, uses `pwd`
-       std::string relFilename(std::string const & buffer_path = empty_string()) const;
+       std::string relFileName(std::string const & buffer_path = empty_string()) const;
        /// \param buf_path if empty, uses `pwd`
-       std::string outputFilename(std::string const & buf_path = empty_string()) const;
+       std::string outputFileName(std::string const & buf_path = empty_string()) const;
        
        /** @returns a mangled representation of the absolute file name
         *  suitable for use in the temp dir when, for example, converting
@@ -270,12 +288,12 @@ public:
         *  with @c dir.
         */
        std::string
-       mangledFilename(std::string const & dir = empty_string()) const;
+       mangledFileName(std::string const & dir = empty_string()) const;
 
        /// \return true if the file is compressed.
        bool isZipped() const;
        /// \return the absolute file name without its .gz, .z, .Z extension
-       std::string unzippedFilename() const;
+       std::string unzippedFileName() const;
 
 private:
        /// Records whether we should save (or export) the filename as a relative