2012-05-04 1 views
0

У меня есть сценарий MATLAB, который должен записывать временные файлы на диск, а затем удалять эти файлы, когда я закончил с ними. Важно, чтобы я сам удалял файлы (а не позволял им накапливаться в каталоге temp), потому что данный код находится в цикле, который выполняется много раз. Если файлы не будут быстро удалены, скрипт быстро сожрет большие объемы дискового пространства.Как удалить временные файлы в MATLAB

Я думал, что снимок кода ниже будет работать, и это произойдет, когда я запустил его самостоятельно. По какой-то причине, однако, фрагмент не удается, когда я включаю его в мой большой скрипт. Временные файлы не удаляются и не помещаются в каталог temp.

% create temporary file 
    myTmpFile = [tempname '.wav']; 
    fs = 32000; 
    wavwrite(zeros(fs,1),fs,myTmpFile); 


    % use the file here 


    % delete the file when we're done 
    prevState = recycle('off'); % turn recycle off to permanently delete files 
    delete(myTmpFile) 
    recycle(prevState);   % restore the state of recycle 

Кто-нибудь знает, что я делаю неправильно? Я запускаю MATLAB 7.10.0 на OS X 10.7.3.

  • EDIT *

Я понял это. См. Мой ответ ниже.

+1

Возможно, вам будет интересно определить объект 'onCleanup', чтобы файл удалялся, даже если функция завершилась из-за ошибки. – Jonas

ответ

1

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

Нижняя линия: в этом фрагменте нет абсолютно ничего плохого. tempname, recycle и delete - отличные функции для создания и уничтожения временных файлов.

1

Вы используете относительное или абсолютное имя файла? Если вы измените текущую папку с cd внутри цикла или если какая-либо из функций, которую ваш код вызывает, вызывает cd, не возвращаясь в исходную папку впоследствии, относительные имена файлов не будут работать. Вы можете проверить текущую папку с помощью pwd.

Возможные решения: 1. Избегайте cd. 2. Используйте абсолютные имена файлов.

+0

hi nrz - Я на самом деле делал все это, но это по-прежнему разумный совет, так что спасибо за то, что поделились им! –

2

Вы должны проверить функции tempdir и tmpname, которые отправляются как часть MATLAB. Они предназначены для предоставления абсолютных путей к именам файлов в каталоге, в котором вы находитесь , гарантированный, чтобы иметь возможность записи. См. Документацию для обеих функций по адресу the MathWorks web site.

Основываясь на проблемах, которые вы видите, я подозреваю (как и nrz), что вы записываете свои временные файлы во все, что происходит в текущем каталоге MATLAB. Это не только приводит к тому, что вы потеряете трек для файлов для целей удаления позже, но в какой-то момент вы закроетесь в директории только для чтения и получите полностью из удачи!

+0

Привет, Боб, я на самом деле сделал опечатку, когда копировал этот фрагмент в StackOverflow. 'tempfile' должен быть' tempname'. (Я отредактировал вопрос.) Итак, на самом деле, я * * использовал стандартные функции MATLAB для генерации временных файлов и все еще получал описанное поведение. Я выяснил проблему, хотя, как оказалось, не связан с фрагментом выше. В любом случае, спасибо за ответ! –

 Смежные вопросы

  • Нет связанных вопросов^_^