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