软件编程
位置:首页>> 软件编程>> C语言>> Matlab实现获取文件夹下所有指定后缀的文件

Matlab实现获取文件夹下所有指定后缀的文件

作者:Toblerone_Wind  发布时间:2021-06-17 23:57:49 

标签:Matlab,指定,后缀,文件

1. 要求

获取指定文件夹下(包含子文件夹),所有指定后缀(如txt)的文件路径(即文件所在目录+文件名),返回一个字符串数组。

2. 代码

获取C:/Users/Administrator/Desktop文件夹下(包含子文件夹)的所有.m文件

clear
dirOutput = dir('C:/Users/Administrator/Desktop/**/*.m');
folder = string({dirOutput.folder}');
file = string({dirOutput.name}');
filepath = strcat(folder, '\', file);

获取C:/Users/Administrator/Desktop文件夹下(不包含子文件夹)的所有.m文件

clear
dirOutput = dir('C:/Users/Administrator/Desktop/*.m');
folder = string({dirOutput.folder}');
file = string({dirOutput.name}');
filepath = strcat(folder, '\', file);

封装成函数。调用时若输入两个参数,则默认搜索子文件夹

function filepath = getFilesPath(baseDir, ext, findSubfile)
if nargin == 2  % 判断输入的参数是否为2
   findSubfile = true;
end
if findSubfile
   dirOutput = dir([baseDir '/**/*.' ext]);
else
   dirOutput = dir([baseDir '/*.' ext]);
end
folder = string({dirOutput.folder}');
file = string({dirOutput.name}');
filepath = strcat(folder, '\', file);
end

调用方法

getFilesPath('C:/Users/Administrator/Desktop', 'm')

结果展示

Matlab实现获取文件夹下所有指定后缀的文件

3. 参考

未仔细学习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()函数之后

先放代码:

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;如果名称为文件,则为0logical
datenum修改日期是一个日期序列值double

提取指定扩展名的文件dir('**/*.m')

来源:https://blog.csdn.net/qq_42276781/article/details/127739572

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com