0

我正在使用带有一组自定义 FilterSpecs 的 uigetfile。这是句子:

[FileName,PathName,FilterIndex] = uigetfile({'*.wav';'*.mp3'},'Open Audio File');

正如你所看到的,我的 FilterSpec 是{'*.wav';'*.mp3'},这工作得很好。我的问题很简单,只是 matlab 总是附加AllFiles(*.*)到我的 FilterSpecs 中。我在 Matlab 文档中进行了搜索,它的字面意思是: “当 FilterSpec 是字符串时,uigetfile 将所有文件(。 )附加到文件类型。” ,但问题是我没有看到另一种不使用字符串来指定自定义 FilterSpec 的方法。如果这会导致一个愚蠢的问题,对不起。提前致谢

4

2 回答 2

0

没有办法(轻松)从中删除“AllFiles”,uigetfile()因为它总是由 MATLAB 添加。

如果你真的想这样做,你必须复制uigetputfile_helper()代码( MYuigetputfile_helper()例如)并更改它。然后你用你的MYuigetfile()- 同样的想法来称呼它。

在我的版本中,更改将在第 311 和 319 行附近uigetputfile_helper(),即

% Now add 'All Files' appropriately.
if (addAllFiles)
  % If a string, create a cell array and append '*.*'.
  if (~iscell(returned_filter))
    returned_filter = {returned_filter; '*.*'};
    % If it is a cell array without descriptors, add '*.*'.
  elseif (size(returned_filter, 2) == 1)
     returned_filter{end+1} = '*.*';
  end
end

希望对您有所帮助...玩得开心!

于 2013-02-26T07:33:51.077 回答
0

如果您从上一张海报的答案中备份几行,您会看到一条评论:

我们希望在所有情况下都添加“所有文件”,除非我们有一个带有描述符的元胞数组。

这条评论对我来说位于 uigetputfile_helper 的第 245 行。只需在您调用时描述您的文件类型uigetfile,您就不会看到All Files (*.*)

例子:

[fname,pname] = uigetfile({'*.m','MATLAB Code (*.m)';'*.mat','MATLAB Data (*.mat)'});
于 2014-05-22T15:45:30.113 回答