Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我的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对象如何帮助您自动关闭在函数中打开的文件,无论该函数正常退出还是由于错误而退出。这种方法可以帮助您避免打开文件句柄缠绵的问题。 更多&回答... |
![]() |
![]() |