MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   如何在Matlab中关闭文件句柄? (https://www.labfans.com/bbs/showthread.php?t=26516)

poster 2019-12-14 20:13

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

这个问题不是永久的。我再次尝试了相同的东西,没有任何更改,它可以正常工作。



[B]回答:[/B]

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

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

... fid = fopen(fileName,'r'); %# Load your data here fclose(fid); ... 现在,第一次运行上面的代码时,您可能会发现您在加载数据的方式上犯了一个错误(毕竟没有人是完美的)。发生该错误时,函数/脚本将退出,而忽略执行该错误行之后的任何代码(例如,调用[URL="http://www.mathworks.com/help/techdoc/ref/fclose.html"]FCLOSE[/URL] )。这意味着您仍有打开的文件句柄。

当您更正错误并重新运行代码时,最终将打开一个读取的[I]新[/I]文件句柄,然后将其关闭,而所有[I]旧的[/I]打开文件句柄仍在那里。正如[URL="https://stackoverflow.com/questions/5222238/how-to-close-file-handle-in-matlab/5222320#5222320"]kwatford指出的那样[/URL] ,您可以使用[URL="http://www.mathworks.com/help/techdoc/ref/fopen.html"]FOPEN[/URL]函数看到此打开文件的句柄。

一种解决方案是按照[URL="https://stackoverflow.com/questions/5222238/how-to-close-file-handle-in-matlab/5222692#5222692"]Jacob的建议[/URL]使用fclose all ,关闭[I]每个[/I]打开的文件句柄。您也可以退出MATLAB,后者关闭旧文件句柄,让我们删除文件。当您重新启动MATLAB并重新运行您的代码(现在没有错误)时,文件句柄不再存在问题。

我在一个相关的SO问题的[URL="https://stackoverflow.com/questions/1098149/how-do-you-handle-resources-in-matlab-in-an-exception-safe-manner/1098309#1098309"]答案中[/URL]讨论了一种更容错的方法来处理文件IO: [URL="https://stackoverflow.com/questions/1098149/how-do-you-handle-resources-in-matlab-in-an-exception-safe-manner"]如何以异常安全的方式处理MATLAB中的资源?[/URL]我在那里的答案显示了[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/oncleanup.html"]onCLeanup对象[/URL]如何帮助您自动关闭在函数中打开的文件,无论该函数正常退出还是由于错误而退出。这种方法可以帮助您避免打开文件句柄缠绵的问题。



[url=https://stackoverflow.com/questions/5222238]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 10:57

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