从文件存储设置启动App并在启动时加载它们

时间:2018-08-03 01:50:12

标签: matlab configuration bootstrapping matlab-deployment matlab-app-designer

我正在使用应用设计器中的应用。在应用程序内,用户将在运行一些计算之前选择一系列选项。 为了简化此过程,我添加了“另存为...”菜单,以便用户可以将当前设置保存到文件(.mat)中,并在下次打开应用程序时重新加载它们。

我要实现的目的是用户可以双击以前保存的.mat文件,这将启动该应用程序,并且该应用程序将自动读取双击的文件并加载所有设置。 / p>

所有这些需要在应用程序被编译并作为可执行文件分发之后发生。

我在想实现此目的的一种方法是使应用程序的启动窗口调用主窗口,并将文件路径作为参数。

任何建议将不胜感激。

2 个答案:

答案 0 :(得分:1)

嗨,我想我可能会为您提供一个非常简单的解决方案。

简要解决方案概述(TL; DR)

使用扩展名.mat )将应用程序中的设置保存下来,例如.mydat。添加 App Input Argument (应用输入自变量),并使startupFcn将自变量作为文件名添加到*.mydat文件中,并且确保还处理自变量为没了。保存第一个输出文件后,使用Windows 打开方式... 选择应用。现在,双击*.mydat文件将打开应用程序的.exe,并将单击文件的文件名提供给startupFcn中的输入参数。


在MATLAB 2018a中作为Windows 10上的已编译exe的示例。

好,开始。让我们设置一个简单的应用程序(我将其称为runAppFromData),它将输入的字符串输入到编辑字段,并将其保存在名为“ settingsValues.mydat”的文件中。看起来像:

small app saving prefs

保存按钮的回调将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中拥有它:

appdesigner input args

我们输入一个单独的输入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中的文件,将要求您选择应用程序,该应用程序对您的部署有利:

Windows open file with...


要考虑的几件事。

.exe打开应用程序后,它将始终显示默认值。如果要输入其他一些默认值,则可以编辑Windows快捷方式 Target (字段)以提供所需输入文件的文件路径(请参见here)。这样可以节省使用新的默认值进行重新编译的时间,但是文件必须保留在某个位置(您也可以将其与应用打包在一起)。

很抱歉,这个答案太长了!希望对您有所帮助!

答案 1 :(得分:0)

您无法双击.mat文件并打开整个可执行文件,但可以肯定地添加一个启动功能,要求您打开.mat文件。不过我的建议是确保至少有一个模板文件,以使用户在第一次运行没有打开文件的程序时不会遇到问题。