Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在matlab中关闭文件句柄?_Matlab_File - Fatal编程技术网

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

如何在matlab中关闭文件句柄?,matlab,file,Matlab,File,我的matlab代码创建了一个新文件,并在其中写入了一些内容。我正在使用fclose()释放文件句柄,但由于某些原因,当我试图在程序完成执行后删除创建的文件时,出现了一个文件正在使用错误。 该文件可以删除,一旦我关闭matlab 这个问题不是永久性的。我再次尝试了同样的方法,但没有做任何更改,效果很好。可能是您无意中多次打开了该文件 使用fopen('all')获取当前打开的文件句柄列表。然后,对于给定的文件句柄,使用fopen(fid)查看其文件名。使用这些来确定是否要多次打开同一个文件。我遇

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


这个问题不是永久性的。我再次尝试了同样的方法,但没有做任何更改,效果很好。

可能是您无意中多次打开了该文件


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

我遇到过很多次这个问题。您可以键入
fclose all
,而不是关闭MATLAB


大多数时候,我在程序中使用
fclose all
——是的,我知道这会关闭MATLAB打开的所有文件,但有时在我的应用程序中,这没关系。把这个答案当作一个建议,而不是一个完整的解决方案。

你可能遇到的问题是一个常见的问题,一个我经常被抓住的问题,因为它很容易错过…… 假设您有一个函数或脚本,可以打开一个文件,从中读取一些数据,然后再次关闭该文件:

...
fid = fopen(fileName,'r');
%# Load your data here
fclose(fid);
...
现在,第一次运行上述代码时,您可能会发现您在加载数据时出错(毕竟,没有人是完美的)。当该错误发生时,函数/脚本将退出,忽略执行该错误行之后的任何代码(如调用)。这意味着您仍然有一个打开的文件句柄

当您更正错误并重新运行代码时,您最终会打开一个从中读取的新文件句柄,然后关闭,而旧的打开文件句柄仍然存在。如图所示,您可以使用函数看到这个打开的文件句柄

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


在一个相关的SO问题中,我讨论了一种更具容错性的处理文件IO的方法:我的回答显示了如何帮助您自动关闭在函数中打开的文件,无论该函数是正常退出还是由于错误退出。这种方法可以帮助您避免延迟打开文件句柄的问题。

不,我不会多次打开文件。我以前也这么认为,但fopen('all')给出了一个空白列表。密切相关-谢谢,解决了我的问题,因为某种原因,使用
打印('-dtiff',filename)
保存的图片仍然“打开”,无法在Windows资源管理器中删除。