Почему при попытке сохранить изображения в MATLAB появляется сообщение об ошибке «Слишком много открытых файлов» - PullRequest
1 голос
/ 21 июня 2011

У меня есть цикл for, который сохраняет изображение на каждой итерации, используя saveas(gcf,[%link,'.jpg']). В начале он работает хорошо, но вылетает и выдает сообщение об ошибке, подобное этому:

??? Ошибка при использовании ==> print at 339 Невозможно создать выходной файл '/20110301/20110301225100.jpg'

Ошибка в ==> saveas на 155

Ошибка в ==> TSI_forecast_display_cloud_decision в 153 java.io.FileNotFoundException: /home/cwchow/.matlab/R2010a/matlab.prf (Слишком много открытых файлов) в java.io.FileOutputStream.open (собственный метод в java.io.FileOutputStream.open (собственный метод) .io.FileOutputStream. (Unknown Source) на java.io.FileOutputStream. (Unknown Source) на com.mathworks.services.Prefs.save (Prefs.java:295) в com.mathworks.services.Prefs $ SavePrefsThread.run ( Prefs.java:702)

Я получаю аналогичный результат, если использую print. Я предполагаю, что MATLAB не закрывает файлы должным образом, что приводит к слишком большому количеству открытых файлов. Может кто-нибудь сказать мне, как избежать этой ошибки?

UPDATE:

Я попробовал и ручку фигуры, и fclose('all'). Я даже использовал close all, они не работают. Я все еще получаю ту же ошибку. Я проверил системный лимит, он уже 1024.

Ответы [ 3 ]

5 голосов
/ 21 июня 2011

Попробуйте позвонить fclose('all') после saveas (при условии, что у вас нет других дескрипторов открытых файлов), чтобы убедиться, что saveas правильно закрывает дескрипторы файлов.

1 голос
/ 22 июня 2011

Одна ошибка, которая предположительно будет исправлена ​​в следующем выпуске 2011b, выглядит следующим образом:

Описание: В некоторых системах Linux, основанных на ограничении дескрипторов ОС Linux, обычное использование MATLAB может вызвать следующееошибки:

Too many files open.
Unexpected error status flag encountered. Resetting to proper

состояние.Хотя некоторые графические интерфейсы могут продолжать работать, командная строка MATLAB будет постоянно выдавать ошибку.Обходной путь: Проверьте ограничения ОС Linux с помощью команды limit в оболочке Linux:

[имя хоста: / home / lusername] 1% дескрипторов пределов Если предел дескрипторов меньше 1024, сбросьте предел дескрипторов на1024. Это будет зависеть от оболочки.В tcsh целесообразно использовать эту команду в файле запуска (например, .cshrc): ограничить дескрипторы 1024

1 голос
/ 21 июня 2011

Звучит так, будто вы не закрываете каждый файл после того, как сохраните его. В Java вы вызываете close (), когда закончите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...