Search code examples
c++temporary-files

C++: Getting a temporary file, cross-platform


I'm looking for a cross-platform way of getting designated a temporary file. For example in linux that would be in the /tmp dir and in Windows in something akin to C:\Users\Username\AppData\Local\Temp.

Does a cross-platform (Boost?) solution to this exist?

EDIT:

I need this file to exist until the program terminates. tmpfile() does not guarantee that. Quoting from ccpreference:

The temporary file created is automatically deleted when the stream is closed (fclose) or when the program terminates normally.


Solution

  • The Boost Filesystem library, from version 3 of that library, can be used to create a temporary file name. It also offers a crisp solution. Indeed, the following C++ code should be platform independent:

    // Boost.Filesystem VERSION 3 required
    #include <string>
    #include <boost/filesystem.hpp>
    boost::filesystem::path temp = boost::filesystem::unique_path();
    const std::string tempstr    = temp.native();  // optional
    

    The filesystem path object temp can be used to open a file or create a subdirectory, while the string object tempstr offers the same information as a string.