一、未仔细学习dir()函数之前
本文介绍一种通过MATLAB获取当前文件夹下所有文件名称的方法,包含子文件夹内的文件名称,请参考。
主要用到的函数包括uigetdir()
、dir()
。
AidDir = uigetdir(); % 通过交互的方式选择一个文件夹
if AidDir == 0 % 用户取消选择
fprintf('Please Select a New Folder!\n');
else
ParentFolder = dir(AidDir); % 获取当前文件夹下的信息
AllFile = struct; % 建立空结构体
AllFile = GetAllFile(ParentFolder,AllFile);
if isempty(fieldnames(AllFile))
fprintf('There are no files in this folder!\n');
else % 当前文件夹下有文件,反馈文件数量
fprintf('Number of Files: %i \n',size(AllFile,2));
end
end
function [AllFileStruct] = GetAllFile(ParentFolder,AllFile)
AllFileStruct = AllFile;
if isempty(fieldnames(AllFile))
FileNum = 0; % 用于统计文件数量
else
FileNum = size(AllFileStruct,2);
end
try
%从第3个开始是文件,如果报错,则表明当前文件夹没有文件,运行catch
for i = 3:length(ParentFolder)
if ParentFolder(i).isdir == 1 % 当前是文件夹
SubFolder = [ParentFolder(i).folder,'\',ParentFolder(i).name];
Temp = dir(SubFolder);
AllFileStruct = GetAllFile(Temp,AllFileStruct); % 函数递归
FileNum = size(AllFileStruct,2);
else
FileNum = FileNum + 1;
%通过结构体可以存储多种数据,本文仅以文件名称为例
AllFileStruct(FileNum).name = ParentFolder(i).name;
end
end
catch
end
end
最后通过查看AllFile
变量即可获取当前文件夹下所有文件名称。
二、仔细学习dir()函数之后 2022.05.12
先放代码:
AidDir = uigetdir(); % 通过交互的方式选择一个文件夹
if AidDir == 0 % 用户取消选择
fprintf('Please Select a New Folder!\n');
else
cd(AidDir)
RawFile = dir('**/*.*'); %主要是这个结构,可以提取所有文件
AllFile = RawFile([RawFile.isdir]==0);
if isempty(fieldnames(AllFile))
fprintf('There are no files in this folder!\n');
else % 当前文件夹下有文件,反馈文件数量
fprintf('Number of Files: %i \n',size(AllFile,1));
end
end
没了。。。。不需要画蛇添足
。。。。
dir()
函数以n×1
结构体数组形式返回,其中n
是dir()
函数返回的文件和文件夹的数量,下表中显示了结构体中的字段。
字段名称 | 说明 | 类 |
---|---|---|
name | 文件或文件夹名称 | char |
folder | 文件或文件夹的位置 | char |
date | 修改日期时间戳 | char |
bytes | 文件大小(以字节为单位) | double |
isdir | 如果名称为文件夹,则为1;如果名称为文件,则为0 | logical |
datenum | 修改日期是一个日期序列值 | double |
提取指定扩展名的文件dir('**/*.m')
。