gpt4 book ai didi

matlab - 如何关闭发生错误后仍处于打开状态的文件?

转载 作者:太空宇宙 更新时间:2023-11-03 19:06:14 24 4
gpt4 key购买 nike

我正在使用

fid = fopen('fgfg.txt');

打开一个文件。

有时在我设法关闭文件之前会发生错误。在关闭 Matlab 之前,我无法对该文件执行任何操作。

如果发生错误,如何关闭文件?

最佳答案

首先可以使用命令

fclose all

其次,您可以使用try-catch block 并关闭您的文件句柄

 try
f = fopen('myfile.txt','r')
% do something
fclose(f);
catch me
fclose(f);
rethrow(me);
end

还有第三种方法,这种方法要好得多。 Matlab 现在是一种带有垃圾收集器的面向对象语言。您可以定义一个包装器对象,它将自动处理其生命周期。

因为在 Matlab 中可以用这种方式调用对象方法:

myObj.method()

以这种方式:

method(myObj)

您可以定义一个类来模拟所有相关的文件命令,并封装生命周期。

classdef safefopen < handle
properties(Access=private)
fid;
end

methods(Access=public)
function this = safefopen(fileName,varargin)
this.fid = fopen(fileName,varargin{:});
end

function fwrite(this,varargin)
fwrite(this.fid,varargin{:});
end

function fprintf(this,varargin)
fprintf(this.fid,varargin{:});
end

function delete(this)
fclose(this.fid);
end
end

end

delete 运算符由 Matlab 自动调用。 (还有更多函数需要包装,(fread、fseek 等))。

现在您有了安全的句柄,无论您丢失了文件的范围还是发生了错误,它都会自动关闭文件。

像这样使用它:

f = safefopen('myFile.txt','wt')
fprintf(f,'Hello world!');

而且不需要关闭。

编辑:我只是想包装 fclose() 什么也不做。它可能对向后兼容有用 - 对于使用文件 ID 的旧函数。

编辑(2):继@AndrewJanke 的好评之后,我想通过在fclose()

上抛出错误来改进删除方法
    function delete(this)          
[msg,errorId] = fclose(this.fid);
if errorId~=0
throw(MException('safefopen:ErrorInIO',msg));
end
end

关于matlab - 如何关闭发生错误后仍处于打开状态的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8847866/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com