Returns the next available filename or foldername, creating the name by incrementing a numbered suffix.
On occasion it may be required to save files without knowing or requiring a particular number sequence, for example when saving interim results or backups during large calculations. Using an internal counter is one option, but this does not work when there are already existing files with those names, or when the code is stopped-and-started, or throws errors. This function offers one simple solution: call the function with the required file (or folder) name, the required suffix (with starting integer) and the file extension (if any), and it will return the next unused name.
%% Inputs %%
Three inputs are required:
1. The basic file or folder name string (1xN char), without the file extension (if any). If the location to be checked for existing files is not the current directory then the basic name must use a relative or absolute path to that location.
2. the suffix string (1xN char), which must contain the starting number. Some examples of suffixes are: '0', '_1', '(5)', '.backup.0001', '_temp_050', etc.. This suffix will be appended to the file/folder name (before the file extension), and the number will be incremented to identify the first unused name starting from the number provided in the suffix. Thus the suffix controls:
* the starting value (can be zero or any positive integer, i.e. 0, 1, 2, etc.).
* the minimum length of the output number (use leading zeros as required).
* any literals and other required characters (note: this function does not check if the literals are permitted by the filesystem. User beware!)
3. The file extension, if required. For folders and files without extensions use ''.
%% Examples %%
%%% Current directory contains files 'A1.m', 'A2.m', and 'A4.m':
ans = 'A3.m'
ans = 'A003.m'
%%% Subdirectory 'HTML' contains folders 'B(1)', 'B(2)', and 'B(4)':
ans = 'B(3)'
ans = 'B(003)'
>> nextname('HTML\B','(1)','',false) % default = name only.
ans = 'B(3)'
>> nextname('HTML\B','(1)','',true) % prepend same path as the input name.
ans = 'HTML\B(3)'
Stephen Cobeldick (2020). Next Available Filename (https://www.mathworks.com/matlabcentral/fileexchange/64108-next-available-filename), MATLAB Central File Exchange. Retrieved .
* Separate file extension input (allows for no-ext names and folders with periods).
* Simplify documentation examples.
* Optional third input selects to return name only or same path as input name.
* Improve efficiency.
* Handle single matched subfolder.
* Add check for no matching files.
* Update HTML docs.