我从命令窗口调用一个函数(包含fopen和fclose),然后在MATLAB遇到我修复的错误(程序的运行时在我保存更正后停止),我想删除它创建的文件,为了重复这个过程。然而,不知何故,MATLAB仍然打开文件并输入fclose(f),在命令窗口中不会让MATLAB放开文件。
function something(something)
f = fopen('something.txt', 'w');
%statments with fprintf
fclose(f);
end
答案 0 :(得分:5)
您可能无法从函数外部访问句柄f,在这种情况下,您可以从Matlab命令窗口尝试fclose('all')
。
通常,最佳做法是在使用文件的代码周围使用try .. catch ...
语句,以便在发生错误时始终调用fclose并释放句柄。
如果您仍然无法删除该文件,并假设它未被其他进程锁定(例如,如果您在Windows记事本中外部查看它),则可能是您正在从Matlab调用库函数,并且共享库维护文件锁定。在这种情况下,请尝试使用unloadlibrary
和loadlibrary
命令重新加载库。
答案 1 :(得分:0)
在这种情况下,使用onCleanup
对象非常有用。
以下是您使用onCleanup
重写的代码 - 当函数正常终止或由于错误而终止时,fclose
将被调用。
function something(something)
f = fopen('something.txt', 'w');
closer = onCleanup( @()fclose(f) );
% statements with fprintf
end
documentation还包含一个完整的例子。