正在加载' *。垫'正确但形成另一个未知的位置

时间:2017-06-08 16:02:22

标签: matlab matlab-deployment matlab-compiler matlab-load

我的matlab脚本中有两个函数。这些函数通过/文件交换数据。 在其中一个函数中,我读取了特定文件的数量和来自它们的数据。稍后我将变量*.mat处理并存储在ggd文件中。如下图所示:

proj1.mat

第二个功能是:

    function browse_pushBtn_Callback(hObject, eventdata, handles)
% hObject    handle to browse_pushBtn (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
handles.directory = uigetdir('C:\temp\');
guidata(hObject,handles);
ggd.directory = handles.directory;
if (ggd.directory)
    set(handles.browse_textEdit,'String',handles.directory);
    disp2listbox(handles.mainLog_listBox, '1. Searching for GGD Datafile:');
    ggd = MyRead(ggd);
    disp2listbox(handles.mainLog_listBox, sprintf('     -%d Bilder 
    gefunden',length(ggd.bilds)));
    save proj1 ggd;
else
    set(handles.browse_textEdit,'String','Select a directory');
end

有趣的是,当我在Matlab工具中运行它们时,这两个函数完全正常。 后来,我编译了我的应用程序的独立可执行文件。这个独立的应用程序在第一个函数之前工作正常;但是,当我调用第二个函数时,它会从另一个包含完全不同数据的未知位置加载function start_pushBtn_Callback(hObject, eventdata, handles) % hObject handle to start_pushBtn (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) option = get(handles.mainMenu,'Value'); if (option == 1) disp2listbox(handles.mainLog_listBox, '2. Calculating the quadratic size..'); fprintf('path is : %s\n', pwd); % did just to check the path (for debugging purpose) load proj1 ggd; ggd = MyProcess(ggd); save proj1 ggd; disp2listbox(handles.mainLog_listBox, sprintf(' -MySize: %d X %d',ggd.X(1), ggd.Y(2))); disp2listbox(handles.mainLog_listBox, '3. opening another function...'); % call to another function elseif (option == 2) disp2listbox(handles.mainLog_listBox, '2. opening third function...'); % call to third different function end 文件 不知道导致这种奇怪行为的问题是什么。

我在执行独立操作时检查了第二个函数中的当前路径(proj1.mat)  并发现它与第一个函数中的那个相同。

任何想法??

1 个答案:

答案 0 :(得分:1)

如果您需要继续在已部署的应用程序中写入和读取文件,我建议在用户计算机的App Data中创建一个本地目录并在那里存储所有文件。您可以使用matlab中心的following函数来完成此操作。例如。

之类的东西
file_root = getapplicationdatadir('your.application.name',1,1);

应该在用户的计算机上创建一个目录(如果它不存在),它将存储所有文件,变量root将为您提供该目录的绝对路径。然后,您可以使用它来保存和加载文件。 E.g。

save([file_root '/proj1.mat'],'ggd');

在第一个函数中,

load([file_root '/proj1.mat'],'ggd');

在第二个功能中。这样您就可以确切地知道文件的存储位置。另外,请阅读我在前面评论中提到的link