以编程方式将所有脏文件保存在 MatLab 中

Posted

技术标签:

【中文标题】以编程方式将所有脏文件保存在 MatLab 中【英文标题】:Programmatically save all dirty files in MatLab 【发布时间】:2016-10-01 13:52:33 【问题描述】:

当编辑器中的多个文件变脏时,我经常会错误地运行 main.m

如果我可以在 main.m 的开头添加一个命令来自动保存每个脏文件,那就太好了。

Save currently running script in Matlab 给出了保存 当前活动 文件的线索的答案,但有没有办法为 ALL 执行此操作文件?

【问题讨论】:

为了非母语人士的利益,我建议您在这里澄清“脏”的含义(已修改但未保存的文件) 【参考方案1】:

您可以使用com.mathworks.mlservices.MLEditorservice 对象访问编辑器并保存所有脏文件。

service = com.mathworks.mlservices.MLEditorServices;

% Get a vector of all open editors
editors = service.getEditorApplication.getOpenEditors();

% For each editor, if it is dirty, save it
for k = 0:(editors.size - 1)
    editor = editors.get(k);

    if editor.isDirty()
        editor.save();
    end
end

与其盲目地保存所有文件,你可以稍微修改一下,这样你就可以传递一个函数列表(你的依赖项)并保存它们。

function saveAll(varargin)
    % Convert all filenames to their full file paths
    filenames = cellfun(@which, varargin, 'uniformoutput', false);

    service = com.mathworks.mlservices.MLEditorServices;

    % Get a vector of all open editors
    editors = service.getEditorApplication.getOpenEditors();

    % For each editor, if it is dirty, save it
    for k = 0:(editors.size - 1)
        editor = editors.get(k);

        % Check if the file in this editor is in our list of filenames
        % and that it's dirty prior to saving it
        if ismember(char(editor.getLongName()), filenames) && editor.isDirty()
            editor.save();
        end
    end
end

这可以用多个函数名(作为字符串)调用

saveAll('myfunc', 'myotherfunc')

【讨论】:

谢谢! (顺便说一句,editors.get(k-1); 是必要的,因为基于 0 的索引,即健全的索引)。不幸的是,这个解决方案并不完全奏效。如果我弄脏了我的main.m 文件(包含该脚本)然后运行它我得到 "java.lang.Exception: java.lang.RuntimeException: Cannot save to main.m while it is debugging. Exit调试模式,然后重试。” @Pi 感谢您指出索引问题。它说您处于调试模式,是这样吗?您是否尝试过在不处于调试模式时运行它?

以上是关于以编程方式将所有脏文件保存在 MatLab 中的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中以编程方式将 sqlite 文件保存在本地文件夹或 nsbundle 中?

以编程方式将网页 HTM 保存为文本文件

以编程方式快速编写 JSON 文件

matlab怎么保存工作文件

有没有办法以编程方式将 R 源代码保存到文件中?

如何在 C/C++ 中以编程方式查找“保存的游戏”文件夹?