2016-08-17 34 views
0

私は解決しようとしているかなり単純な問題があります。私はMATLABでファイルのバックアップを作成したいと思います。ここでMATLAB copyfileエラー:引数に文字列を含める必要があります

は私のコードは、(私は私の現在のディレクトリからこのスクリプトを始めています)です:

これは私にエラーを与えて実行
backup_dir=strcat(pwd,'/backups/'); 
cd('../../source_destination/'); 
source_dir=pwd; 
cd(backup_dir); 

source_files=strcat(source_dir,'/*.m'); 
source_file_list=dir(source_files); 
source_file_names={source_file_list.name}'; 

for i=1:numel(source_file_names) 
    source_file=strcat(source_dir,'/',source_file_names(i)); 
    backup_file=strcat(backup_dir,source_file_names(i)); 
    copyfile(source_file,backup_file); 
end 

Error using copyfile 
Argument must contain a string. 

しかし、私は実際にsource_filebackup_fileを調べるとき両方の変数が有効な文字列(' 'で囲まれています)を返し、両方の文字列が有効なファイルを指しています。

>> source_file 

source_file = 

    '/Users/me/mydir/cool/source_destination/archive.m' 

>> backup_file 

backup_file = 

    '/Users/me/mydir/cool/world/scripts/backups/archive.m' 

また、実際の内容はsource_file_listです。

なぜこのエラーが発生しますか?あなたがそうでなければstrcat、中括弧でcell配列の内容を参照解除に必要

答えて

1

は、文字列の配列を返しcell

for i=1:numel(source_file_names) 
    source_file=strcat(source_dir,'/',source_file_names{i}); 
    backup_file=strcat(backup_dir,source_file_names{i}); 
    copyfile(source_file,backup_file); 
end 
+1

ありがとうございました! 'source_file_names(i)'は文字列を返すと誤って想定していたと思います。なぜなら、実際に表示すると、引用符で囲まれて表示され、 'source_file_names {i}'は引用符で囲まれていませんでした。 – Alex

+0

@Alex確かに。 'cell'配列に固有の柔軟性のために、それらは実際の内容対汎用要素にアクセスするための特別な形式の参照を必要とします。これは慣れ親しんだものの、非常に強力なものです。 – TroyHaskin

+2

私は問題がセル配列であったことを知っていますが、 'strcat'を使う代わりに' fullfile'を使うのが好きです。 IMHOは読みやすく、理解しやすい。 'fullfile(source_dir、ソースファイル名{i});' –

関連する問題