以编程方式将所有脏文件保存在 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 中的主要内容,如果未能解决你的问题,请参考以下文章