Я хотел бы сохранить файлы из приложения как filename.app.mat
. Таким образом, ясно, что они являются файлами Matlab, но я могу использовать {'*.app.mat', 'App MAT Files}
в uigetfile
для фильтрации файлов, которые понимаютсяприложение.
Теперь, если я использую
[f, p] = uiputfile({'*.app.mat', 'App MAT files'})
и введу имя файла без каких-либо расширений (скажем, test
), f
будет
>> f
f =
'test.mat'
Matlab (проверенная версия была R2019a Update 6 на машине с Linux) только добавила .mat
, а не (как я ожидал) .app.mat
. Хотя f
легко заменить на .app.mat
, внутренняя проверка uiputfile
на наличие файла и, если он истинный, вопрос о том, должен ли он быть перезаписан, не будет работать. Выборочная проверка приведет к изменению пользовательского интерфейса, поскольку диалоговое окно выбора файла уже будет закрыто.
Я ищу способ заставить uiputfile
вернуть test.app.mat
(в сценарии выше).
Обновление:
Из-за комментариев ниже, я проверил, существует ли проблема, если я тоже использую Windows. В файле uigetputfile_helper.m
(в директории private
рядом с uiputfile.m
) видно, что для выбора файла используется matlab.ui.internal.dialog.FileSaveChooser()
. Если я сделаю следующее на моей машине с Linux:
ufd = matlab.ui.internal.dialog.FileSaveChooser();
ufd.FileFilter = {'*.app.mat', 'App MAT files'};
ufd.show();
Если я сейчас введу test
в качестве имени файла:
>> ufd.FileName
ans =
'test'
в то время как на машине с Windows это будет
>> ufd.FileName
ans =
'test.app.mat'
В случае с Linux, вложенная функция fixFileExtensions(filename)
добавит расширение .mat
.