在Matlab中保存文件时自动生成名称?

时间:2014-05-19 22:39:28

标签: matlab user-interface filenames auto-generate

我正在使用GUI,我有一个名为' work.mid'的文件。用户可以对其进行一些修改,当他们点击保存按钮时,我希望将其保存为' work1.mid'到&c; \ cn \ _david_datas \'。当他们第二次点击该按钮时,它应该将其保存为' work2.mid',第三次' work3.mid'等等。这是我到目前为止的代码:

nmat = readmidi_java('work.mid');
Name = fullfile('c:\saved_datas\', '?????');
writemidi_java(nmat, Name);

弄清楚应该去做什么?????是我被困的地方。

2 个答案:

答案 0 :(得分:1)

如果您之前没有work*.midwork*.mid内有任意数量的连续c:\saved_datas\文件,则以下代码可以使用。现在,如果文件没有按顺序排列,可以对此代码进行调整,如果你想处理这种情况,请告诉我。

此处列出的代码 -

%// Parameters
org_filename = 'work.mid';
main_dir = 'c:\saved_datas\'; %//'

%// Your code
nmat = readmidi_java(org_filename);

%// Added code
[~,filename_noext,ext] = fileparts(org_filename)
filenames = ls(strcat(main_dir,filename_noext,'*',ext))
new_filename = strcat(filename_noext,num2str(size(filenames,1)+1),ext)
Name = fullfile(main_dir,new_filename)

%// Your code
writemidi_java(nmat, Name);

为了实现文件名的唯一性,有些人还使用时间戳。这可以像这样实现 -

org_filename = 'work.mid'; %//'
main_dir = 'c:\saved_datas\'; %//'

[~,filename_noext,ext] = fileparts(org_filename)
new_filename = strcat('filename_noext','-',datestr(clock,'yyyy-mm-dd-hh-MM-SS'),ext)
Name = fullfile(main_dir,new_filename);

答案 1 :(得分:0)

这可以通过几种方式完成,具体取决于您如何构建GUI。您需要跟踪按下按钮的次数。在按钮的回调中,您可以使用持久变量('count')并在函数开头将其递增1。然后用filename = ['work'num2str(count)'。mid']构造文件名。或者,如果已使用OOP实现GUI,则可以增加类成员变量。

要保存文件,请使用带有先前构造的文件名的'save()'函数和对变量的引用。

查看持久变量的文档,save,fullfile和uiputfile以获取额外信息。