JUCE  v5.4.1-191-g0ab5e696f
JUCE API
Looking for a senior C++ dev?
I'm looking for work. Hire me!
juce::TemporaryFile Class Reference

Manages a temporary file, which will be deleted when this object is deleted. More...

#include <juce_TemporaryFile.h>

Collaboration diagram for juce::TemporaryFile:

Public Types

enum  OptionFlags {
  useHiddenFile = 1,
  putNumbersInBrackets = 2
}
 

Public Member Functions

 TemporaryFile (const String &suffix=String(), int optionFlags=0)
 Creates a randomly-named temporary file in the default temp directory. More...
 
 TemporaryFile (const File &targetFile, int optionFlags=0)
 Creates a temporary file in the same directory as a specified file. More...
 
 TemporaryFile (const File &targetFile, const File &temporaryFile)
 Creates a temporary file using an explicit filename. More...
 
 ~TemporaryFile ()
 Destructor. More...
 
bool deleteTemporaryFile () const
 Attempts to delete the temporary file, if it exists. More...
 
const FilegetFile () const noexcept
 Returns the temporary file. More...
 
const FilegetTargetFile () const noexcept
 Returns the target file that was specified in the constructor. More...
 
bool overwriteTargetFileWithTemporary () const
 Tries to move the temporary file to overwrite the target file that was specified in the constructor. More...
 

Private Attributes

const File targetFile
 
const File temporaryFile
 

Detailed Description

Manages a temporary file, which will be deleted when this object is deleted.

This object is intended to be used as a stack based object, using its scope to make sure the temporary file isn't left lying around.

For example:

{
File myTargetFile ("~/myfile.txt");
// this will choose a file called something like "~/myfile_temp239348.txt"
// which definitely doesn't exist at the time the constructor is called.
TemporaryFile temp (myTargetFile);
// create a stream to the temporary file, and write some data to it...
if (auto out = std::unique_ptr<FileOutputStream> (temp.getFile().createOutputStream()))
{
out->write ( ...etc )
out.reset(); // (deletes the stream)
// ..now we've finished writing, this will rename the temp file to
// make it replace the target file we specified above.
bool succeeded = temp.overwriteTargetFileWithTemporary();
}
// ..and even if something went wrong and our overwrite failed,
// as the TemporaryFile object goes out of scope here, it'll make sure
// that the temp file gets deleted.
}
See also
File, FileOutputStream

{Core}

Member Enumeration Documentation

◆ OptionFlags

Enumerator
useHiddenFile 

Indicates that the temporary file should be hidden - i.e.

its name should start with a dot.

putNumbersInBrackets 

Indicates that when numbers are appended to make sure the file is unique, they should go in brackets rather than just being appended (see File::getNonexistentSibling() )

Constructor & Destructor Documentation

◆ TemporaryFile() [1/3]

juce::TemporaryFile::TemporaryFile ( const String suffix = String(),
int  optionFlags = 0 
)

Creates a randomly-named temporary file in the default temp directory.

Parameters
suffixa file suffix to use for the file
optionFlagsa combination of the values listed in the OptionFlags enum The file will not be created until you write to it. And remember that when this object is deleted, the file will also be deleted!

◆ TemporaryFile() [2/3]

juce::TemporaryFile::TemporaryFile ( const File targetFile,
int  optionFlags = 0 
)

Creates a temporary file in the same directory as a specified file.

This is useful if you have a file that you want to overwrite, but don't want to harm the original file if the write operation fails. You can use this to create a temporary file next to the target file, then write to the temporary file, and finally use overwriteTargetFileWithTemporary() to replace the target file with the one you've just written.

This class won't create any files until you actually write to them. And remember that when this object is deleted, the temporary file will also be deleted!

Parameters
targetFilethe file that you intend to overwrite - the temporary file will be created in the same directory as this
optionFlagsa combination of the values listed in the OptionFlags enum

◆ TemporaryFile() [3/3]

juce::TemporaryFile::TemporaryFile ( const File targetFile,
const File temporaryFile 
)

Creates a temporary file using an explicit filename.

The other constructors are a better choice than this one, unless for some reason you need to explicitly specify the temporary file you want to use.

Parameters
targetFilethe file that you intend to overwrite
temporaryFilethe temporary file to be used

◆ ~TemporaryFile()

juce::TemporaryFile::~TemporaryFile ( )

Destructor.

When this object is deleted it will make sure that its temporary file is also deleted! If the operation fails, it'll throw an assertion in debug mode.

Member Function Documentation

◆ deleteTemporaryFile()

bool juce::TemporaryFile::deleteTemporaryFile ( ) const

Attempts to delete the temporary file, if it exists.

Returns
true if the file is successfully deleted (or if it didn't exist).

◆ getFile()

const File& juce::TemporaryFile::getFile ( ) const
inlinenoexcept

Returns the temporary file.

◆ getTargetFile()

const File& juce::TemporaryFile::getTargetFile ( ) const
inlinenoexcept

Returns the target file that was specified in the constructor.

◆ overwriteTargetFileWithTemporary()

bool juce::TemporaryFile::overwriteTargetFileWithTemporary ( ) const

Tries to move the temporary file to overwrite the target file that was specified in the constructor.

If you used the constructor that specified a target file, this will attempt to replace that file with the temporary one.

Before calling this, make sure:

  • that you've actually written to the temporary file
  • that you've closed any open streams that you were using to write to it
  • and that you don't have any streams open to the target file, which would prevent it being overwritten

If the file move succeeds, this returns true, and the temporary file will have disappeared. If it fails, the temporary file will probably still exist, but will be deleted when this object is destroyed.

Member Data Documentation

◆ targetFile

const File juce::TemporaryFile::targetFile
private

◆ temporaryFile

const File juce::TemporaryFile::temporaryFile
private

The documentation for this class was generated from the following file: