2013-04-14 16:17:56 +00:00
|
|
|
// -*- C++ -*-
|
|
|
|
/**
|
|
|
|
* \file TempFile.h
|
|
|
|
* This file is part of LyX, the document processor.
|
|
|
|
* Licence details can be found in the file COPYING.
|
|
|
|
*
|
|
|
|
* \author Georg Baum
|
|
|
|
*
|
|
|
|
* Full author contact details are available in file CREDITS.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef TEMPFILE_H
|
|
|
|
#define TEMPFILE_H
|
|
|
|
|
|
|
|
#include <string>
|
|
|
|
|
|
|
|
namespace lyx {
|
|
|
|
namespace support {
|
|
|
|
|
|
|
|
class FileName;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Class for safely creating temporary files without race conditions.
|
|
|
|
* The file is created in the constructor, and deleted in the destructor.
|
|
|
|
* You may do anything with the file (including deletion), but the instance
|
|
|
|
* of this class must stay alive as long as the file is needed.
|
|
|
|
*/
|
|
|
|
class TempFile {
|
|
|
|
public:
|
|
|
|
/**
|
|
|
|
*Create a temporary file with the given mask.
|
|
|
|
* \p mask must be in filesystem encoding, if it contains a
|
|
|
|
* relative path, the template file will be created in the global
|
|
|
|
* temporary directory as given by 'package().temp_dir()'.
|
|
|
|
* If the mask contains "XXXXXX" this portion will be replaced by
|
2014-06-07 19:22:26 +00:00
|
|
|
* a uniquely generated string. If it does not contain this portion,
|
2013-04-14 16:17:56 +00:00
|
|
|
* it will be automatically appended using a dot. Therefore, please
|
|
|
|
* specify the "XXXXXX" portion if the extension of the generated
|
|
|
|
* name is important (e.g. for the converter machinery).
|
|
|
|
*/
|
|
|
|
TempFile(std::string const & mask);
|
|
|
|
TempFile(FileName const & temp_dir, std::string const & mask);
|
|
|
|
~TempFile();
|
|
|
|
/**
|
|
|
|
* Get the name of the temporary file.
|
|
|
|
* This is empty if the file could not be created.
|
|
|
|
*/
|
|
|
|
FileName name() const;
|
2014-06-09 09:08:24 +00:00
|
|
|
/**
|
|
|
|
* Set whether the file should be automatically deleted in the
|
|
|
|
* destructor.
|
|
|
|
* Automatic deletion is the default, but it can be switched off if
|
|
|
|
* the file should be kept, because it should be renamed afterwards.
|
|
|
|
*/
|
|
|
|
void setAutoRemove(bool autoremove);
|
2013-04-14 16:17:56 +00:00
|
|
|
private:
|
|
|
|
///
|
|
|
|
struct Private;
|
|
|
|
Private * d;
|
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace support
|
|
|
|
} // namespace lyx
|
|
|
|
|
|
|
|
#endif
|