Matlab:获取子目录和文件的完整路径

时间:2014-03-13 16:26:54

标签: matlab file-io

我在'../../My_Dir'处有一个相对于Matlab工作目录的目录。该目录本身有几个子目录。然后每个子目录中都有几个文件。

我想创建字符串的二维数组或矩阵。每行代表一个子目录。该行的第一列是子目录本身的完整路径,其他列是该子目录中文件的完整路径

有人能告诉我一些能帮我实现的代码吗?谢谢!

3 个答案:

答案 0 :(得分:0)

您可以先按

获取所有子文件夹
d = dir(pathFolder);
isub = [d(:).isdir];
subFolders = {d(isub).name}';

注意,您还需要从中删除...

subFolders(ismember(subFolders,{'.','..'})) = [];

然后使用(来自this post)获取每个文件:

function fileList = getAllFiles(dirName)

    dirData = dir(dirName);      %# Get the data for the current directory
    dirIndex = [dirData.isdir];  %# Find the index for directories
    fileList = {dirData(~dirIndex).name}';  %'# Get a list of the files
    if ~isempty(fileList)
        fileList = cellfun(@(x) fullfile(dirName,x),...  %# Prepend path to files
            fileList,'UniformOutput',false);
    end
    subDirs = {dirData(dirIndex).name};  %# Get a list of the subdirectories
    validIndex = ~ismember(subDirs,{'.','..'});  %# Find index of subdirectories
    %#   that are not '.' or '..'
    for iDir = find(validIndex)                  %# Loop over valid subdirectories
        nextDir = fullfile(dirName,subDirs{iDir});    %# Get the subdirectory path
        fileList = [fileList; getAllFiles(nextDir)];  %# Recursively call getAllFiles
    end
end

答案 1 :(得分:0)

获取文件夹FULL PATH:

d = dir(baseDir);
d(~[d.isdir])= []; %Remove all non directories.
names = setdiff({d.name},{'.','..'});

filesFullPath = names;

for i=1:size(names,2)
    filesFullPath{i} = fullfile(baseDir,names{1,i});
end

Matlab... "thanks" for this s...

答案 2 :(得分:0)

例如,假设我在'My_Dir'中有三个名为'A'的子文件夹(包含'a1.txt''a2.txt'),'B'(包含{{1} }})和'b1.txt'(包含'C''c1.txt''c2.txt')。这将说明如何处理每个子文件夹中包含不同数量文件的案例......

对于MATLAB版本R2016b及更高版本,dir函数支持递归搜索,允许我们收集如下文件列表:

'c3.txt'

作为替代方案,特别是对于早期版本,可以使用我发布到MathWorks文件交换的实用程序来完成:dirPlus。它可以使用如下:

dirData = dir('My_Dir\*\*.*');        % Get structure of folder contents
dirData = dirData(~[dirData.isdir]);  % Omit folders (keep only files)
fileList = fullfile({dirData.folder}.', {dirData.name}.');  % Get full file paths

fileList =

  6×1 cell array

    '...\My_Dir\A\a1.txt'
    '...\My_Dir\A\a2.txt'
    '...\My_Dir\B\b1.txt'
    '...\My_Dir\C\c1.txt'
    '...\My_Dir\C\c2.txt'
    '...\My_Dir\C\c3.txt'

现在我们可以按您上面指定的方式格式化dirData = dirPlus('My_Dir', 'Struct', true, 'Depth', 1); fileList = fullfile({dirData.folder}.', {dirData.name}.'); 。首先,我们可以使用unique来获取唯一子文件夹和索引的列表。然后,该索引可以与mat2celldiff一起使用,将子文件夹中的fileList分解为第二级单元格数组封装:

fileList