我的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
)
并发现它与第一个函数中的那个相同。
任何想法??
答案 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。