从文件存储设置启动应用程序并在启动时加载它们

Start App from file storing settings and load them at startup

我正在应用程序设计器中开发应用程序。在应用程序中,用户将在 运行 一些计算之前 select 一堆选项。 为了简化这个过程,我添加了一个 "Save as..." 菜单,以便用户可以将当前设置保存到一个文件 (.mat) 并在他们下次打开应用程序时重新加载它们。

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

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

我认为实现此目的的一种方法是启动 window 调用主 window 的应用程序,将文件路径作为参数传递。

如有任何建议,我们将不胜感激。

您不能双击.mat 文件并打开整个可执行文件,但您绝对可以添加要求您打开.mat 文件的启动功能。不过,我的建议是确保您至少有一个模板文件,这样用户就不会 运行 在第一次 运行 没有文件的情况下遇到问题打开。

您好,我想我可能有一个相当简单但复杂的解决方案适合您。

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

使用 而非 .mat 的扩展名保存应用程序的设置,例如.mydat。添加一个 App Input Argument 并让 startupFcn 将参数视为 *.mydat 文件的文件名并且 一定要处理参数被遗漏的情况。保存第一个输出文件后,使用 windows 打开方式... 到 select 您的应用程序。现在双击 *.mydat 文件将打开您应用程序的 .exe 并将单击文件的文件名提供给 startupFcn.

中的输入参数

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

好的,开始吧。让我们设置一个简单的应用程序(我称之为 运行AppFromData),它将字符串输入到编辑字段并将其保存在名为 '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 何时将此功能添加到 "run app with inputs" 但我在 2018a:

我们进行单个输入,fileName 需要一个字符串形式的文件名(您将在下面看到原因)。所以添加输入并单击确定。然后我们被送到 startupFcn 的 "code view"。在这里,我们将编写解析输入文件的逻辑。对于我的简单示例应用程序,我将输入文件加载到结构中,然后将值发送到编辑字段:

% 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 快捷方式 Target 字段以提供所需输入文件的文件路径(请参阅 here)。这节省了使用新的默认值重新编译,但文件必须保留在某个地方(您也可以将其与应用程序打包)。

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