Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-14, 20:13   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 如何在Matlab中关闭文件句柄?

我的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对象如何帮助您自动关闭在函数中打开的文件,无论该函数正常退出还是由于错误而退出。这种方法可以帮助您避免打开文件句柄缠绵的问题。



更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 22:46


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.