最近做一个项目,由于数据分别放在不同的文件夹中,对大量数据文件“打开->复制->粘贴”,觉得很费事,于是就写了对基于Matlab的文件夹遍历。文价夹遍历有两种方式,即层次遍历和深度遍历。个人比较倾向用层次遍历的方法,因为深度遍历要用到递归,当文件目录比较深的时候可能会出现栈溢出的现象(当然这只是个极端的情况),而且必须要做成一个函数,若需要记录每个文件的路径,就比较麻烦!而层次遍历思路相对简单,易于理解,废话不多说,直接贴上代码:
【由于之前版本中有一些错误,现在修改过来了,并且给出了函数的调用Demo,欢迎大家一起交流学习】
1、基于matlab的深度优先遍历:
% Input: % strPath: the directory of the file % mFiles: save the directory of the files % iTotalCount: the count of the walked files % Ouput: % mResFiles: the full directory of every file % iTCount: the total file count in the directory which your hava input function [ mResFiles, iTCount ] = DeepTravel( strPath, mFiles, iTotalCount ) iTmpCount = iTotalCount; path=strPath; Files = dir(fullfile( path,'*.*')); LengthFiles = length(Files); if LengthFiles <= 2 mResFiles = mFiles; iTCount = iTmpCount; return; end for iCount=2:LengthFiles if Files(iCount).isdir==1 if Files(iCount).name ~='.' filePath = [strPath Files(iCount).name '/']; [mFiles, iTmpCount] = DeepTravel( filePath, mFiles, iTmpCount); end else iTmpCount = iTmpCount + 1; filePath = [strPath Files(iCount).name]; mFiles{iTmpCount} = filePath; end end mResFiles = mFiles; iTCount = iTmpCount; end
2、基于Matlab的层次遍历(广度优先遍历):
function [ mFiles ] = RangTraversal( strPath ) %定义两数组,分别保存文件和路径 mFiles = cell(0,0); mPath = cell(0,0); mPath{1}=strPath; [r,c] = size(mPath); while c ~= 0 strPath = mPath{1}; Files = dir(fullfile( strPath,'*.*')); LengthFiles = length(Files); if LengthFiles == 0 break; end mPath(1)=[]; iCount = 1; while LengthFiles>0 if Files(iCount).isdir==1 if Files(iCount).name ~='.' filePath = [strPath Files(iCount).name '/']; [r,c] = size(mPath); mPath{c+1}= filePath; end else filePath = [strPath Files(iCount).name]; [row,col] = size(mFiles); mFiles{col+1}=filePath; end LengthFiles = LengthFiles-1; iCount = iCount+1; end [r,c] = size(mPath); end mFiles = mFiles'; end
3、调用Demo:
clc clear close all %% The directory of your files str = 'C:/test/'; %% The use of depth-first walk mFiles = []; [mFiles, iFilesCount] = DeepTravel(str,mFiles,0) mFiles = mFiles'; %% The use of breadth first walk mFiles2 = RangTraversal(str)