Команда Matlab exist () не является простой операцией файловой системы; он также рассматривает переменные, функции и т. д. Поскольку вы используете I:, я предполагаю, что это сетевой диск, и вы, вероятно, столкнулись с проблемой кэширования содержимого dir, о которой упоминает Джонас.
Вот несколько других обходных путей, в случае, если nsanders 'two-arg существуют () или исправления уведомления об изменении Jonas' не работают для вас.
Попробуйте использовать абсолютные пути к файлам, например, "fopen ('I: \ file2.asc')", вместо относительных путей и pwd. Matlab будет обрабатывать неквалифицированные имена файлов как «частичные пути» как для существующих (), так и для fopen (), и это взаимодействует с кэшированием информации каталога. Ls () не работает с частичными путями, поэтому может видеть файл, а другие функции - нет.
Вы можете использовать Java из Matlab, чтобы выполнить более простой тест существования файла.
java.io.File('file2.asc').exists()
Или, так как команда ls () показывает нужный файл, вы можете просто реализовать проверку существования файла поверх ls.
ismember({'file2.asc'}, ls())
"{}" необходимо для того, чтобы функция ismember () работала на уровне строки, а не на уровне символа.
Если у вас все еще проблемы с чтением, попробуйте выполнить чтение более низкого уровня с помощью Java из Matlab. Это скажет вам, есть ли проблемы с определенными функциями ввода / вывода в Matlab, или сам процесс не имеет доступа к файлу. Попробуй это. Если вы получаете символ из этого, это означает, что ваш процесс Matlab.exe может видеть файл.
istr = java.io.FileInputStream('file2.asc')
c = char(istr.read())