我的matlab代码创建了一个新文件,并在其中写入了一些内容.我使用fclose()来释放文件句柄但由于某些原因,当我尝试在程序完成执行后删除创建的文件时,我得到一个正在使用的文件错误.关闭matlab后,可以删除该文件.
问题不是永久性的.我再次尝试了相同的事情,没有任何改变,它的工作原理.
我有这么多次问题.您只需输入MATLAB,而不是关闭MATLAB fclose all.
我大部分时间都fclose all在我的程序中使用---是的,我知道关闭MATLAB打开的所有文件,但有时在我的应用程序中,这没关系.将此答案视为建议而非完整解决方案.
你可能遇到的问题是一个常见问题,而且我经常遇到这个问题因为很容易错过......
假设您有一个函数或脚本打开文件,从中读取一些数据,然后再次关闭文件:
...
fid = fopen(fileName,'r');
%# Load your data here
fclose(fid);
...
Run Code Online (Sandbox Code Playgroud)
现在,第一次运行上面的代码时,您可能会发现在加载数据时出错了(毕竟没有人完美).当发生该错误时,函数/脚本将退出,忽略执行错误行之后的任何代码(如调用FCLOSE).这意味着您仍然有一个打开的文件句柄.
当您更正错误并重新运行代码时,最终会打开一个新的文件句柄,您可以从中读取然后关闭,而旧的打开文件句柄仍然存在.正如kwatford指出的那样,你可以使用FOPEN函数看到这个打开的文件句柄.
一个解决方案就是fclose all按照Jacob的建议使用,关闭每个打开的文件句柄.您也可以退出MATLAB,它会关闭旧文件句柄并让您删除文件.当您重新启动MATLAB并重新运行(现在没有错误)代码时,您不再遇到延迟文件句柄的问题.
在我对相关SO问题的回答中,我讨论了一种更容错的处理文件IO的方法:如何以异常安全的方式处理MATLAB中的资源?我在那里的答案显示了onCLeanup对象如何帮助您自动关闭在函数中打开的文件,无论该函数是正常退出还是由于错误.此方法可以帮助您避免延迟打开文件句柄的问题.