Daniel@0: function filenames = dirKPM(dirname, ext, varargin) Daniel@0: % dirKPM Like the built-in dir command, but returns filenames as a cell array instead of a struct Daniel@0: % Daniel@0: % filenames = dirKPM(dirname) Daniel@0: % returns all files, except '.' and '..' Daniel@0: % Daniel@0: % filenames = dirKPM('images', '*.jpg') Daniel@0: % returns files with this extension Daniel@0: % eg filenames{1} = 'foo.jpg' etc Daniel@0: % Daniel@0: % OPTIONAL ARGUMENTS [default in brackets] Daniel@0: % filenames = dirKPM('images', '', param1, val1, param2, val2, ...) Daniel@0: % Daniel@0: % 'fileType'='image' ['all'] means return files with extension .jpg, .png, .bmp Daniel@0: % Daniel@0: % 'prepend'=1 [0] means preprend folder name to filename Daniel@0: % eg filenames{1} = 'images/foo.jpg' Daniel@0: % Daniel@0: % 'doSort'=1 [1] means sort filenames in ascending alphanumerical order (where possible) Daniel@0: % Daniel@0: % 'doRecurse'=1 [0] recursive dir, apply the same dirKPM call on all Daniel@0: % subfolders (decrease MAXDEPTH option to prevent recursion from branching Daniel@0: % too explosively) Daniel@0: Daniel@0: if nargin < 1, dirname = '.'; end Daniel@0: Daniel@0: if nargin < 2, ext = ''; end Daniel@0: Daniel@0: [fileType, prepend, doSort, doRecurse, MAXDEPTH, DEPTH] = process_options(... Daniel@0: varargin, 'fileType', 'all', 'prepend', 0, 'doSort', 1, 'doRecurse', 0,... Daniel@0: 'MAXDEPTH', 3, 'DEPTH', 0); Daniel@0: Daniel@0: tmp = dir(fullfile(dirname, ext)); Daniel@0: [filenames I] = setdiff({tmp.name}, {'.', '..'}); Daniel@0: tmp = tmp(I); Daniel@0: Daniel@0: if doRecurse && sum([tmp.isdir])>0 && DEPTH0 Daniel@0: filenames(nfilenames+1:nfilenames+length(subDirFilenames)) = subDirFilenames; Daniel@0: end Daniel@0: end Daniel@0: end Daniel@0: Daniel@0: nfiles = length(filenames); Daniel@0: if nfiles==0 return; end Daniel@0: Daniel@0: switch fileType Daniel@0: case 'image', Daniel@0: for fi=1:nfiles Daniel@0: good(fi) = isImage(filenames{fi}); Daniel@0: end Daniel@0: filenames = filenames(find(good)); Daniel@0: case 'all', Daniel@0: % no-op Daniel@0: otherwise Daniel@0: error(sprintf('unrecognized file type %s', fileType)); Daniel@0: end Daniel@0: Daniel@0: if doSort Daniel@0: % % sort filenames alphanumerically (if possible) Daniel@0: % DJE, buggy, MUST save tmp.anr/snr/str or else we potentially lose Daniel@0: % filenames Daniel@0: % tmp = asort(filenames, '-s', 'ascend'); Daniel@0: % if ~isempty(tmp.anr) Daniel@0: % filenames = tmp.anr'; Daniel@0: % else Daniel@0: % filenames = tmp.str'; Daniel@0: % end Daniel@0: % if names could not be sorted, return original order Daniel@0: Daniel@0: filenames=sort(filenames); Daniel@0: Daniel@0: end Daniel@0: Daniel@0: Daniel@0: if prepend Daniel@0: nfiles = length(filenames); Daniel@0: for fi=1:nfiles Daniel@0: filenames{fi} = fullfile(dirname, filenames{fi}); Daniel@0: end Daniel@0: end Daniel@0: