function filename=cosmo_make_temp_filename(prefix,suffix)
% give temporary filename that does not exist when this function is called
%
% filename=cosmo_make_temp_filename(prefix,suffix)
%
% Inputs:
% prefix optional, string with prefix for temporary file
% (default: '')
% suffix string [or cellstring] with suffix [suffixes] for
% temporary file [files]
% (default: '')
%
% Output:
% filename filename that does not exist when this function was
% called (in the current directory), starting with
% prefix, ending with suffix, and with a random infix
% string.
% If suffix is a cellstring, then filename is a
% cellstring with as many elements as suffix,
% each with the same prefix and random infix.
%
% Examples:
% % generate random filename
% fn=cosmo_make_temp_filename();
%
% % generate random filename starting with 'foo'
% fn=cosmo_make_temp_filename('foo');
%
% % generate random filename starting with 'foo' and ending with '.bar'
% fn=cosmo_make_temp_filename('foo','.bar');
%
% % generate two random filename, both starting with 'foo', and ending
% % with '.bar' and '.baz', respectively. The output fns is a cell with
% % two strings
% fns=cosmo_make_temp_filename('foo',{'.bar','.bar'});
%
% # For CoSMoMVPA's copyright information and license terms, #
% # see the COPYING file distributed with CoSMoMVPA. #
if nargin<2, suffix=''; end
if nargin<1, prefix=''; end
check_input(prefix,suffix);
suffix_is_cell=iscell(suffix);
if suffix_is_cell
suffix_cell=suffix;
else
suffix_cell={suffix};
end
nsuffix=numel(suffix_cell);
filename_cell=cell(nsuffix,1);
while true
infix=generate_random_infix();
does_exist=false;
for k=1:nsuffix
fn=[prefix infix suffix_cell{k}];
if exist(fn,'file')
does_exist=true;
break;
end
filename_cell{k}=fn;
end
if ~does_exist
break;
end
end
if suffix_is_cell
filename=filename_cell;
else
filename=filename_cell{1};
end
function infix=generate_random_infix(infix_length)
if nargin<1
infix_length=20;
end
char_val_min=double('a');
char_val_max=double('z');
char_val_range=char_val_max-char_val_min;
rand_chars=char(rand(1,infix_length)*char_val_range+char_val_min);
infix=['tmp_' rand_chars];
function check_input(prefix,suffix)
if ~ischar(prefix)
error('prefix must be a string');
end
if ~ischar(suffix) && ~iscellstr(suffix)
error('suffix must be string or cell with strings');
end