file tempfile finds an unused file name using template if given, creates a file by that name, returns an open channel to the file, and attempts to delete the file when it is closed. If varname is given, stores the name of the created file in the variable having that name and does not attempt to delete the file when it is closed. template may include directory components and a file name extension.
when varname is used, it is the responsibility of the caller to delete the file when it is no longer needed. Rather than usin try... finally for cleanup one trick is to delete the file immediately after creating it. The channel remains available until closed but the file is no longer visible in the filesystem:
set chan [file tempfile filename] file delete $filename do stuff with $chan close $chan
% # <directory><prefix><extension> % file tempfile x /tmp/dingo.txt file5 % set x /tmp/dingo_TaaRfi.txt % # <prefix><extension> % file tempfile x dingo.txt file6 % set x /tmp/dingo_LX7jgP.txt %# <prefix> % file tempfile x txt file9 % set x /tmp/txt_C41OoS %# <extension> % file tempfile x .txt file10 % set x /tmp/tcl_F0Y9on.txt % # Cant use directory by itself as shown below it takes the directory as / and prefix as tmp % file tempfile x /tmp can't create temporary file: permission denied %