3

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

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

2 回答 2

5

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

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

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

于 2012-11-11T23:33:42.170 回答
0

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

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

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

文档还包含一个恰好针对这种情况的示例。

于 2012-11-12T11:42:36.863 回答