嗨,我想我可能有一个相当简单的解决方案,尽管涉及到你。
简要解决方案概述 (TL;DR)
使用扩展名以外.mat
的扩展名保存应用程序中的设置,例如.mydat
。添加一个App Input Argument并将startupFcn
该参数视为文件的文件名,*.mydat
并确保还处理该参数被遗漏的情况。保存第一个输出文件后,使用 windows Open with...选择您的应用程序。现在双击该*.mydat
文件将打开您的应用程序.exe
,并将单击文件的文件名提供给您的startupFcn
.
MATLAB 2018a 中的一个示例,作为 Windows 10 上的已编译 exe。
好的,开始。让我们设置一个简单的应用程序(我称之为 runAppFromData),它将字符串输入到编辑字段并将其保存在名为“settingsValues.mydat”的文件中。看起来像:
保存按钮的回调将收集Value
到一个名为的局部变量value
中,然后将其保存到磁盘:
% Button pushed function: Save
function save(app, event)
value = app.InputField.Value;%#ok
% User selects save location
saveLocation = uigetdir();
% Now just save the value variable to the selected location.
save(fullfile(saveLocation,'settingsValues.mydat'), 'value', '-mat');
end
我不知道何时appdesigner
添加了“使用输入运行应用程序”的功能,但我在 2018a 中拥有它:
我们做一个单一的输入,fileName
它需要一个文件名作为一个字符串(你会在下面看到为什么)。所以添加输入并单击确定。然后我们被发送到startupFcn
. 在这里,我们将编写解析输入文件的逻辑。对于我的简单示例应用程序,我将输入文件加载到结构中,然后将值发送到编辑字段:
% Code that executes after component creation
function startupFcn(app, fileName)
if nargin < 2 % app is itself an argument
% just continue running the application without error
return
end
% fileName is a string, so let's load it into a struc
S = load(fileName, '-mat');
% The value field will be there because that is how we wrote it
app.InputField.Value = S.value;
end
请注意,我执行了一项nargin
检查以处理首次运行的案例(以及任何时候从实际的可执行文件运行应用程序)。
MATLAB 不关心 matlab 文件的文件扩展名是什么,如果您有未知的文件扩展名,例如.mydata
,在 windows 中双击该文件会要求您选择应用程序,这对您的部署有利:
有几件事需要考虑。
从应用程序打开时,.exe
它将始终显示默认值。如果您想输入一些其他默认值,您可以编辑您的 Windows 快捷方式目标字段以提供所需输入文件的文件路径(请参见此处)。这样可以节省使用新默认值重新编译,但文件必须保留在某个地方(您也可以将其与应用程序一起打包)。
对不起,这个答案太长了!我希望它有帮助!