Список файлов MatLab (исключая каталоги) в папке


Таким образом, я знаю, что могу перечислить все файлы и каталоги в моей текущей папке, используя такие функции, как dir() или ls(), и я знаю, что после перечисления я могу отличить их друг от друга с помощью поля isdir.

Но есть ли способ исключить каталоги из самого начала и перечислить только файлы?

Еще лучше, есть ли способ исключить текущий . и родительский .. каталоги-которые будут (конечно) отображаться каждый раз - и перечислить все остальные файлы и каталоги? Серьезно, кто использует ls() интересно, есть ли .?

2 3

2 ответа:

Выводом dir является то, что операционная система подает ему. Так что это может быть по-разному в зависимости от того, какую систему вы используете. Вот мой подход к этому:

list=dir();
CleanList=setdiff({list.name},{'.','..'})'; 

Я не уверен, есть ли встроенный метод для этого, но почему бы не написать пользовательскую функцию, чтобы сделать то, что вы хотите?

Например:

function list = files_dir(varargin)
% Similar functionality to 'dir', but only returns files (no folders)

list = dir(varargin{:});

list([list.isdir]) = [];

Затем вы можете настроить это для выполнения других функций, таких как исключение скрытых файлов.

И для вашего второго запроса, где каталоги '.' и '..' исключены:

function list = dir_exclude_self(varargin)
% same as 'dir', but doesn't return '.' or '..'

list = dir(varargin{:});

self_indices = ismember({list.name}, {'.', '..'});
list(self_indices) = [];

Если вы разместите такие функции в определенном месте на вашем компьютере, вы можете гарантировать, что они всегда доступны для использования, добавив их в MATLAB путь в вашем файле startup.m.