无法关闭文本文件,因为MATLAB在执行失败后使用它

时间:2012-11-11 23:29:50

标签: matlab

我从命令窗口调用一个函数(包含fopen和fclose),然后在MATLAB遇到我修复的错误(程序的运行时在我保存更正后停止),我想删除它创建的文件,为了重复这个过程。然而,不知何故,MATLAB仍然打开文件并输入fclose(f),在命令窗口中不会让MATLAB放开文件。

function something(something)
    f = fopen('something.txt', 'w');        
    %statments with fprintf  
    fclose(f);    
end

2 个答案:

答案 0 :(得分:5)

您可能无法从函数外部访问句柄f,在这种情况下,您可以从Matlab命令窗口尝试fclose('all')

通常,最佳做法是在使用文件的代码周围使用try .. catch ...语句,以便在发生错误时始终调用fclose并释放句柄。

如果您仍然无法删除该文件,并假设它未被其他进程锁定(例如,如果您在Windows记事本中外部查看它),则可能是您正在从Matlab调用库函数,并且共享库维护文件锁定。在这种情况下,请尝试使用unloadlibraryloadlibrary命令重新加载库。

答案 1 :(得分:0)

在这种情况下,使用onCleanup对象非常有用。

以下是您使用onCleanup重写的代码 - 当函数正常终止或由于错误而终止时,fclose将被调用。

function something(something)
    f = fopen('something.txt', 'w');        
    closer = onCleanup( @()fclose(f) );
    % statements with fprintf 
end

documentation还包含一个完整的例子。