0

ディレクトリの再帰的トラバーサルは 2 レベルを超えません。これはなぜですか?

================================================== ===========


    currentFolderDir = '.'; % pwd
    % path('C:\Users\EI\Documents\MATLAB\OO\Simple Object Creation in Object Oriented');

    深さレベル = 0;
    フォルダ数 = 0;
    ファイル数 = 0;

    fprintf('====================================\n');  
    fprintf('深度レベル: %d\n', depthLevel);
    [folderCount、fileCount] = fileDirectoryRecursiveTraversal (currentFolderDir、depthLevel、folderCount、fileCount);

================================================== ===========




    関数 [folderCount、fileCount] = fileDirectoryRecursiveTraversal (currentFile、depthLevel、folderCount、fileCount)    

        i = 1 の場合:深さレベル
            fprintf('\t\t');
        終わり

        fprintf('%s\n', currentFile ); % エントリの名前を表示  
        %isdir(currentFile) % [ERR] レベル 2 を超えることはできません
        %一時停止;

        if (isdir(currentFile)) % ディレクトリかチェック   
            フォルダ数 = フォルダ数 + 1;
            fprintf('\n%d 個のフォルダーがあります。\n', folderCount);
            一時停止

            深さレベル = 深さレベル + 1;
            fprintf('====================================\n');  
            fprintf('深度レベル: %d\n', depthLevel);

             % ディレクトリ内のすべてのエントリのリストを取得する
             エントリ = dir(現在のファイル);

             % エントリ (1).name = '.'
             % エントリ (2).name = '..'
             numberOfEntries = 長さ (エントリ); % 現在のフォルダーとフォルダーへのポインターを含む 1 レベル上


             % リストが null でないことを確認してください
             % if( (numberOfEntries - 2) ~= 0 ) % 2: % エントリ (1).name = '.'; % エントリ (2).name = '..'
             場合 (エントリー数 ~= 2)
                % すべてのエントリをループします
                i = 3 の場合:numberOfEntries    
                   % トラバースする再帰呼び出し
                   [folderCount, fileCount] = fileDirectoryRecursiveTraversal( entry(i).name, depthLevel, folderCount, fileCount); % i = 3:numberOfEntries   
                終わり

                fprintf('\n深度レベル: %d\n', depthLevel);
                fprintf('%d 個のファイルがあります。\n\n', fileCount);  
                ファイル数 = 0;
             そうしないと
                % disp('cccccccccccccccccccc')
                ファイル数 = 0; % 空のフォルダ
             終わり
        そうしないと
           ファイル数 = ファイル数 + 1;
           フォルダ数 = 0;
        終わり    


        フォルダ数 = フォルダ数 - 1;
        深さレベル = 深さレベル - 1; % 終了レベル    
    終わり
4

1 に答える 1

4

特定のディレクトリ内のファイルを再帰的に処理するために使用する関数を適応させました。すべてのサブディレクトリを正しく調べてファイル名を表示しますが、深さレベル、フォルダー数、およびファイル数は表示しません。適応するのは簡単ですが、助けが必要な場合は私に知らせてください:

function processDirectory(path)

if ~strcmp(path(end), filesep)
    path(end+1)=filesep;
end
dirInfo= dir(path);
files=~[dirInfo.isdir];
fileNames={dirInfo(files).name};
disp(path);
if ~isempty(fileNames)
    for i=1:length(fileNames)
        % Do whathever (show file names?)
        disp(fileNames(i));
    end
end

% For each subdir, call itself again
isDir=[dirInfo.isdir];
dirNames={dirInfo(isDir).name};
dirNames(strcmp(dirNames, '.') | strcmp(dirNames, '..'))=[];

for i=1:length(dirNames)
    processDirectory([path dirNames{i} filesep]);    
end
于 2013-01-14T10:31:19.390 に答える