Итак, у меня есть довольно простая проблема, которую я пытаюсь решить. Я хочу создать резервную копию файла в MATLAB.Ошибка копирования файла MATLAB: аргумент должен содержать строку
Вот мой код (я начинаю этот скрипт из моего текущего каталога):
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_file
и backup_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
действителен.
Так почему я должен получать эту ошибку?
Спасибо! Наверное, я предположил (неправильно), что 'source_file_names (i)' будет возвращать строку, так как, когда я действительно показываю ее, она появилась в кавычках, а 'source_file_names {i}' не отображалась в кавычках. – Alex
@Alex Действительно. Из-за гибкости, присущей массивам 'cell', они требуют специальной формы ссылки для доступа к фактическому содержимому в сравнении с общим элементом. Это то, к чему привыкнуть, но очень мощный. – TroyHaskin
Я знаю, что проблема была в массиве ячеек, но вместо использования 'strcat' я предпочитаю использовать' fullfile'. ИМХО гораздо легче читать и понимать. 'fullfile (source_dir, source_file_names {i});' –