【问题标题】:Unable to open a file with uigetfile in Matlab无法在 Matlab 中使用 uigetfile 打开文件
【发布时间】:2013-04-19 11:29:05
【问题描述】:

我正在构建一个允许用户打开一些文件的代码。

reference = warndlg('Choose the files for analysis.');
uiwait(reference);
filenames2 = uigetfile('./*.txt','MultiSelect', 'on');
if ~iscell(filenames2)
    filenames2 = {filenames2};    % force it to be a cell array of strings
end
numberOfFiles = numel(filenames2);

data = importdata(filenames2{i},delimiterIn,headerlinesIn);

当我运行代码时,出现提示,我按 OK,然后什么也没有发生。代码停止了,告诉我:

Error using importdata (line 137)
Unable to open file.

Error in FreqVSChampB_no_spec (line 119)
data=importdata(filenames2{1},delimiterIn,headerlinesIn);

我只是没有机会选择文件。单元阵列保持为空,如下图所示。

【问题讨论】:

  • 我在您提供的代码 sn-p 中看不到任何importdata
  • 请查看对上一个答案的编辑 - 检查用户是否没有在uigetfile 对话框中按cancel
  • 我不明白为什么这些信息会与我的实际问题相关。我看到在某个时候添加它的意义,但我正在自己测试它,我没有按下取消按钮。测试是否按下 Cancel 的唯一方法是检查 filenames2 == 0。但因为即使我按下 OK,它也会这样做,这不会给我任何信息。
  • uigetfile 有问题。在调试模式下运行,看看你得到你选择的文件名。首先尝试不使用 `MultiSelect。
  • 为什么需要警告对话框?为什么不使用uigetfile 对话框的标题?

标签: arrays matlab cell


【解决方案1】:

你可以尝试添加

pause(0.1);

就在uiwait(reference);之后

对我来说它有效。事实上,当我们使用 uiwait 和 uigetfile 时,我注意到活动窗口发生了变化。

【讨论】:

    【解决方案2】:

    MATLAB 找不到您选择的文件。您的变量 filenames2 仅包含文件的名称,而不包含其完整路径。如果您不提供importdata 的完整路径,它将搜索您在 MATLAB 路径上提供的任何文件名,如果找不到,则会出现您所看到的错误。

    试试这样的 - 为了便于描述,我只是用单选来做,但你可以用多选做类似的事情。

    [fileName, pathName] = uigetfile('*.txt');
    fullNameWithPath = fullfile(pathName, fileName);
    importdata(fullNameWithPath)
    

    fullfile 很有用,因为它在pathNamefileName 之间插入正确的字符(Windows 上为\,Unix 上为/)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-29
      • 2014-07-08
      • 1970-01-01
      • 2013-02-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      相关资源
      最近更新 更多