如何在matlab中关闭文件句柄?

时间:2011-03-07 16:31:56

标签: matlab file

我的matlab代码创建了一个新文件,并在其中写入了一些内容。我使用fclose()来释放文件句柄但由于某些原因,当我尝试在程序完成执行后删除创建的文件时,我得到一个正在使用的文件错误。 关闭matlab后,可以删除该文件。

问题不是永久性的。我再次尝试了同样的事情而没有任何改变,它确实有效。

3 个答案:

答案 0 :(得分:5)

我这么多次遇到过这个问题。您只需输入fclose all,而不是关闭MATLAB。

大多数时候我在我的程序中使用fclose all - 是的,我知道关闭MATLAB打开的所有文件,但有时在我的应用程序中,这没关系。将此答案视为建议而非完整解决方案。

答案 1 :(得分:5)

你可能遇到的问题是一个常见的问题,而且我经常遇到这个问题因为很容易错过......

假设你有一个打开文件的函数或脚本,从中读取一些数据,然后再次关闭文件:

...
fid = fopen(fileName,'r');
%# Load your data here
fclose(fid);
...

现在,第一次运行上面的代码时,您可能会发现在加载数据时出错了(毕竟没有人完美)。发生该错误时,函数/脚本将退出,忽略执行错误行之后的任何代码(如调用FCLOSE)。这意味着您仍然有一个打开的文件句柄。

当您更正错误并重新运行代码时,您最终会打开一个文件句柄,您可以从中读取然后关闭该文件句柄,并且 old 打开文件句柄仍然存在。如kwatford points out,您可以使用FOPEN函数查看此打开文件句柄。

一种解决方案是将fclose all用作Jacob suggests,关闭每个打开的文件句柄。您也可以退出MATLAB,它会关闭旧文件句柄并让您删除文件。当您重新启动MATLAB并重新运行(现在没有错误)代码时,您不再有延迟文件句柄的问题。

我讨论了一种更容错的方法来处理my answer中相关SO问题的文件IO:How do you handle resources in MATLAB in an exception safe manner?我的回答显示了onCLeanup objects如何帮助您自动关闭文件在函数中打开,无论该函数是正常退出还是由于错误。这种方法可以帮助您避免延迟打开文件句柄的问题。

答案 2 :(得分:2)

您可能会多次意外打开文件。

使用fopen('all')获取当前打开的文件句柄列表。然后,对于给定的文件句柄,使用fopen(fid)查看其文件名是什么。使用这些来确定您是否多次打开同一个文件。