问题
Using MATLAB, I need to extract an array of "valid" files from a directory. By valid, I mean they must not be a directory and they must not be a hidden file. Filtering out directories is easy enough because the structure that dir
returns has a field called isDir. However I also need to filter out hidden files that MacOSX or Windows might put in the directory. What is the easiest cross-platform way to do this? I don't really understand how hidden files work.
回答1:
You can combine DIR and FILEATTRIB to check for hidden files.
folder = uigetdir('please choose directory');
fileList = dir(folder);
%# remove all folders
isBadFile = cat(1,fileList.isdir); %# all directories are bad
%# loop to identify hidden files
for iFile = find(~isBadFile)' %'# loop only non-dirs
%# on OSX, hidden files start with a dot
isBadFile(iFile) = strcmp(fileList(iFile).name(1),'.');
if ~isBadFile(iFile) && ispc
%# check for hidden Windows files - only works on Windows
[~,stats] = fileattrib(fullfile(folder,fileList(iFile).name));
if stats.hidden
isBadFile(iFile) = true;
end
end
end
%# remove bad files
fileList(isBadFile) = [];
回答2:
Assuming all hidden files start with '.'. Here is a shortcut to remove them:
s = dir(target); % 'target' is the investigated directory
%remove hidden files
s = s(arrayfun(@(x) ~strcmp(x.name(1),'.'),s))
来源:https://stackoverflow.com/questions/5234341/how-to-filter-hidden-files-after-calling-matlabs-dir-function