]> git.lyx.org Git - lyx.git/blobdiff - src/support/FileName.h
Revert qprocess code. Revisions reverted: 22026, 22030, 22044, 22048,
[lyx.git] / src / support / FileName.h
index 188fa6bd761a90c897a171cd3e68f2e88e2aa652..c293f66021fada455cd4ad35df7cabf2aba3d827 100644 (file)
 #ifndef FILENAME_H
 #define FILENAME_H
 
-#include "strfwd.h"
+#include "support/strfwd.h"
 
-#include <string>
 #include <ctime>
 
 
 namespace lyx {
 namespace support {
 
+/// Defined in "FileNameList.h".
+class FileNameList;
 
 /**
  * Class for storing file names.
@@ -30,7 +31,7 @@ namespace support {
 class FileName {
 public:
        /// Constructor for empty filenames
-       FileName() {}
+       FileName();
        /** Constructor for nonempty filenames.
         * explicit because we don't want implicit conversion of relative
         * paths in function arguments (e.g. of unlink).
@@ -38,7 +39,14 @@ public:
         * Encoding is always UTF-8.
         */
        explicit FileName(std::string const & abs_filename);
-       virtual ~FileName() {}
+
+       /// copy constructor.
+       FileName(FileName const &);
+
+       ///
+       FileName & operator=(FileName const &);
+
+       virtual ~FileName();
        /** Set a new filename.
         * \param filename the file in question. Must have an absolute path.
         * Encoding is always UTF-8.
@@ -46,9 +54,9 @@ public:
        virtual void set(std::string const & filename);
        virtual void erase();
        /// Is this filename empty?
-       bool empty() const { return name_.empty(); }
+       bool empty() const;
        /// get the absolute file name in UTF-8 encoding
-       std::string const absFilename() const { return name_; }
+       std::string absFilename() const;
        /**
         * Get the file name in the encoding used by the file system.
         * Only use this for accessing the file, e.g. with an fstream.
@@ -57,34 +65,57 @@ public:
 
        /// returns true if the file exists
        bool exists() const;
+       /// \return true if this object points to a symbolic link.
+       bool isSymLink() const;
+       /// \return true if the file is empty.
+       bool isFileEmpty() const;
        /// returns time of last write access
        std::time_t lastModified() const;
+       /// generates a checksum of a file
+       unsigned long checksum() const;
        /// return true when file is readable but not writabel
        bool isReadOnly() const;
        /// return true when it names a directory
        bool isDirectory() const;
        /// return true when file/directory is readable
-       bool isReadable() const;
+       bool isReadableDirectory() const;
        /// return true when it is a file and readable
-       bool isFileReadable() const;
+       bool isReadableFile() const;
        /// return true when file/directory is writable
        bool isWritable() const;
        /// return true when file/directory is writable (write test file)
        bool isDirWritable() const;
+       /// \return list other files in the directory having optional extension 'ext'.
+       FileNameList dirList(std::string const & ext) const;
        
+       /// copy a file
+       /// \return true when file/directory is writable (write test file)
+       /// \param overwrite: set to true if we should erase the \c target 
+       /// file if it exists,
+       bool copyTo(FileName const & target, bool overwrite = false) const;
+
+       /// remove pointed file.
+       /// \retrun true on success.
+       bool removeFile() const;
+
        /// remove directory and all contents, returns true on success
        bool destroyDirectory() const;
        /// Creates directory. Returns true on success
        bool createDirectory(int permissions) const;
 
-       /// Get the contents of a file as a huge std::string
-       std::string fileContents() const;
+       /// Get the contents of a file as a huge docstring.
+       /// \param encoding defines the encoding of the file contents.
+       /// Only four encodings are supported:
+       /// "UTF-8", "ascii", "latin1" and "local8bit" which uses the
+       /// current system locale.
+       docstring fileContents(std::string const & encoding) const;
+
+       /// Change extension.
        /**
-        * Get a FileName from \p name in the encoding used by the file system.
-        * Only use this for filenames you got directly from the file system,
-        * e.g. from reading a directory.
-        * \p name must have an absolute path.
-        */
+       * If oldname does not have an extension, it is appended.
+       * If the extension is empty, any extension is removed from the name.
+       */
+       void changeExtension(std::string const & extension);
 
        /** Guess the file format name (as in Format::name()) from contents.
         Normally you don't want to use this directly, but rather
@@ -99,21 +130,27 @@ public:
        /// (securely) create a temporary file in the given dir with the given mask
        /// \p mask must be in filesystem encoding
        static FileName tempName(FileName const & dir = FileName(),
-                                               std::string const & mask = std::string());
+                                               std::string const & mask = empty_string());
 
        /// filename without path
        std::string onlyFileName() const;
        /// path without file name
-       std::string onlyPath() const;
+       FileName onlyPath() const;
        /// used for display in the Gui
        docstring displayName(int threshold = 1000) const;
 
+       /// change to a directory, return success
+       bool chdir() const;
+       
+       /// \param buffer_path if empty, uses `pwd`
+       docstring const relPath(std::string const & path) const;
+       
+       docstring const absoluteFilePath() const;
 
-protected:
-       /// The absolute file name.
-       /// The encoding is currently unspecified, anything else than ASCII
-       /// may or may not work.
-       std::string name_;
+private:
+       ///
+       struct Private;
+       Private * const d;
 };
 
 
@@ -150,9 +187,9 @@ public:
 
        bool saveAbsPath() const { return save_abs_path_; }
        /// \param buffer_path if empty, uses `pwd`
-       std::string const relFilename(std::string const & buffer_path = std::string()) const;
+       std::string relFilename(std::string const & buffer_path = empty_string()) const;
        /// \param buf_path if empty, uses `pwd`
-       std::string const outputFilename(std::string const & buf_path = std::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
@@ -174,13 +211,13 @@ public:
         *  Only the mangled file name is returned. It is not prepended
         *  with @c dir.
         */
-       std::string const
-       mangledFilename(std::string const & dir = std::string()) const;
+       std::string
+       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 const unzippedFilename() const;
+       std::string unzippedFilename() const;
 
 private:
        bool save_abs_path_;
@@ -194,7 +231,6 @@ private:
 bool operator==(DocFileName const &, DocFileName const &);
 bool operator!=(DocFileName const &, DocFileName const &);
 
-
 } // namespace support
 } // namespace lyx