MATLAB遍历子文件夹及其下文件

本文介绍如何使用MATLAB进行文件目录的遍历和特定格式文件的读取,包括使用dir函数获取目录信息,以及使用uigetdir函数方便地选择文件夹。文章还提及了处理多层目录和多种格式文件的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Ref: https://blog.youkuaiyun.com/u012675539/article/details/43671663

文件目录结构

/maindir
|-- subdir1
|-- datafile1.dat
|-- datafile2.dat
|-- subdir2
|-- datafiel3.dat
|-- datafiel4.dat
|-- subdir3
|-- datafile5.dat
|-- datafile6.dat

主文件夹maindir下含有三个子文件夹,子文件夹分别包含两个二进制数据文件

函数dir

可以使用函数dir,D = DIR(‘directory_name’)返回一个结构数组,包含了文件夹directory_name下的子文件夹和子文件的一些信息,第1个成员是文件名,第4个成员表示是否为文件夹。

要注意的是第1个数组元素和第2个数组元素分别是’.’和’…’,表示当前目录和上层目录。

代码实现

maindir = 'D:\MATLAB\project';
subdir  = dir( maindir );

for i = 1 : length( subdir )
    if( isequal( subdir( i ).name, '.' )||...
        isequal( subdir( i ).name, '..')||...
        ~subdir( i ).isdir)               % 如果不是目录则跳过
        continue;
    end
    subdirpath = fullfile( maindir, subdir( i ).name, '*.dat' );
    dat = dir( subdirpath )               % 子文件夹下找后缀为dat的文件

    for j = 1 : length( dat )
        datpath = fullfile( maindir, subdir( i ).name, dat( j ).name);
        fid = fopen( datpath );
        % 此处添加你的对文件读写操作 %
    end
end


函数uigetdir
由于前面maindir需要指定路径,可能不是太方便。

使用uigetdir可以方便的通过对话框选择文件夹,返回值为文件夹路径名。代码如下:

maindir = uigetdir( ‘选择一个文件夹’ );


上面的例子比较简单,只涉及到两层目录以及指定格式的文件。

对于多层目录,以及多种格式文件的处理,则可以采用[Matlab对文件夹的层次遍历和深度遍历](https://blog.youkuaiyun.com/guoxiaojie_415/article/details/21317323)层次遍历与深度遍历两种方法实现。具体操作及例子见连接MATLAB对文件夹的层次遍历和深度遍历,不再详细阐述。


### 遍历文件夹的方法 为了在 MATLAB遍历指定目录及其所有文件夹中的文件,可以采用递归方法来实现这一功能。下面提供了一种通过函数 `getAllFiles` 来获取给定路径下所有的 `.avi` 文件列表的方式[^1]。 ```matlab function fileList = getAllFiles(dirName) d = dir(fullfile(dirName, '*.*')); % 获取当前文件夹下的所有文件文件夹信息 fileList = {}; % 初始化文件列表为空 for k = 1:length(d) % 循环遍历每一个条目 thisFile = d(k); if thisFile.isdir % 如果是文件夹,则递归调用本函数继续深入查找 subFolder = fullfile(dirName, thisFile.name); if ~ismember(subFolder, {'.', '..'}) % 排除 '.' 和 '..' 这两个特殊项 fileList = [fileList; getAllFiles(subFolder)]; end elseif endsWith(thisFile.name, '.avi') % 只收集 .avi 类型的文件 fullFileName = fullfile(dirName, thisFile.name); fileList{end+1} = fullFileName; end end end ``` 此代码定义了一个名为 `getAllFiles` 的函数,该函数接收一个参数 `dirName` 表示起始搜索位置,并返回一个包含找到的所有 `.avi` 文件绝对路径字符串数组的结果。对于每个遇到的文件夹,都会再次调用自己来进行更深层次的探索直到最底层为止;而对于匹配到的目标文件则记录其完整路径至最终输出列表中去。 使用上述自定义函数前需先设置好初始工作区: ```matlab % 设置目标根目录 rootDir = uigetdir('D:\Sequences\Weizmann\bend', 'Select Directory'); if rootDir(end) ~= '\' rootDir = [rootDir, '\']; end % 调用函数并显示结果 allAVIfiles = getAllFiles(rootDir); disp(allAVIfiles); ``` 这段脚本允许用户交互式地选择想要操作的具体磁盘上的某个特定文件夹作为起点,之后便能自动检索出其中全部符合条件(即具有`.avi` 扩展名)的数据对象供后续分析处理之用了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值