Matlab copyfile 文件到文件不起作用
Matlab copyfile file to file not working
我想复制一个目录中的源文件并将其粘贴到同一目录中,但名称不同。我想遍历许多参与者。源文件的名称因参与者而异(尽管它始终具有相同的开头)。
我写了以下循环:
file_root = '/pathtofile/';
sourcefile = 'ABCDE.nii';
destinationfile = 'FGHIJ.nii';
for s = 1:length(subjects) % loops over subjects
copyfile([file_root subjects{s} '/' 'stats' '/' sourcefile], [file_root subjects{s} '/' 'stats' '/' destinationfile]);
end
此循环适用于具有相同源文件名的主题子集,并且它在与源文件相同的目录中正确生成目标文件。
现在,当我在源文件中包含通配符以处理源文件中的不同名称时,循环仍然有效,但它会生成一个名为 destinationfile 的新目录,其中包含 sourcefile 的副本(同名) .所以,例如:
file_root = '/pathtofile/';
sourcefile = 'ABCD*.img';
destinationfile = 'FGHIJ.img';
for s = 1:length(subjects) % loops over subjects
copyfile([file_root subjects{s} '/' 'stats' '/' sourcefile], [file_root subjects{s} '/' 'stats' '/' destinationfile]);
end
此循环生成一个新目录 'FGHIJ.img',其中包含 'file_root' 目录中的“ABCDE.img”文件。
所以我的问题是:如何在源中使用带有通配符的 copyfile(source, destination),它会在同一目录中生成新的目标文件。
我希望这是有道理的。任何 help/suggestions 将不胜感激!
虽然 copyfile 无法识别 *.img 以您想象的方式表示通配符,但您的问题是有道理的。
一个更好的方法(也许不是最好的,但我会做的)是在目录中生成一个文件列表,它可以使用 * 通配符:
file_root = '/pathtofile/';
for s = 1:length(subjects) % loops over subjects
%create the directory for this subject
subject_dir = fullfile(file_root,subjects{s},'stats');
%get a struct of the .img files beginning with ABCD with the dir command
subject_sources = dir(subject_dir,'ABCD*.img');
%loop through the source files and copy them
for fidx = 1:length(subject_sources)
source_fname = subject_sources(fidx).name;
%of course you can add lines to format/create a proper
%destination file name. strtok, strsplit, regexp...
dest_fname = ['FGHIJ' s(5:end)];
copyfile(fullfile(subject_dir,source_fname),...
fullfile(subject_dir,dest_fname)
end
end
使用通配符时,copyfile
假定您将多个文件复制到一个文件夹,因此将目标解释为一个目录。您不能使用通配符和设置目标文件。使用dir
命令获取匹配的文件名。
我还建议使用 fullfile
连接文件路径,因为它更可靠
file_root = '/pathtofile/';
sourcefile = 'ABCD*.img';
destinationfile = 'FGHIJ.img';
for s = 1:length(subjects) % loops over subjects
source_pattern=fullfile(file_root subjects{s} , 'stats' , sourcefile);
matching_files=dir(source_pattern);
source_file=fullfile(file_root subjects{s} , 'stats' , matching_files(1).name);
target_file=fullfile(file_root subjects{s} , 'stats' , destinationfile)
copyfile(source_file, target_file);
end
我想复制一个目录中的源文件并将其粘贴到同一目录中,但名称不同。我想遍历许多参与者。源文件的名称因参与者而异(尽管它始终具有相同的开头)。
我写了以下循环:
file_root = '/pathtofile/';
sourcefile = 'ABCDE.nii';
destinationfile = 'FGHIJ.nii';
for s = 1:length(subjects) % loops over subjects
copyfile([file_root subjects{s} '/' 'stats' '/' sourcefile], [file_root subjects{s} '/' 'stats' '/' destinationfile]);
end
此循环适用于具有相同源文件名的主题子集,并且它在与源文件相同的目录中正确生成目标文件。
现在,当我在源文件中包含通配符以处理源文件中的不同名称时,循环仍然有效,但它会生成一个名为 destinationfile 的新目录,其中包含 sourcefile 的副本(同名) .所以,例如:
file_root = '/pathtofile/';
sourcefile = 'ABCD*.img';
destinationfile = 'FGHIJ.img';
for s = 1:length(subjects) % loops over subjects
copyfile([file_root subjects{s} '/' 'stats' '/' sourcefile], [file_root subjects{s} '/' 'stats' '/' destinationfile]);
end
此循环生成一个新目录 'FGHIJ.img',其中包含 'file_root' 目录中的“ABCDE.img”文件。
所以我的问题是:如何在源中使用带有通配符的 copyfile(source, destination),它会在同一目录中生成新的目标文件。
我希望这是有道理的。任何 help/suggestions 将不胜感激!
虽然 copyfile 无法识别 *.img 以您想象的方式表示通配符,但您的问题是有道理的。
一个更好的方法(也许不是最好的,但我会做的)是在目录中生成一个文件列表,它可以使用 * 通配符:
file_root = '/pathtofile/';
for s = 1:length(subjects) % loops over subjects
%create the directory for this subject
subject_dir = fullfile(file_root,subjects{s},'stats');
%get a struct of the .img files beginning with ABCD with the dir command
subject_sources = dir(subject_dir,'ABCD*.img');
%loop through the source files and copy them
for fidx = 1:length(subject_sources)
source_fname = subject_sources(fidx).name;
%of course you can add lines to format/create a proper
%destination file name. strtok, strsplit, regexp...
dest_fname = ['FGHIJ' s(5:end)];
copyfile(fullfile(subject_dir,source_fname),...
fullfile(subject_dir,dest_fname)
end
end
使用通配符时,copyfile
假定您将多个文件复制到一个文件夹,因此将目标解释为一个目录。您不能使用通配符和设置目标文件。使用dir
命令获取匹配的文件名。
我还建议使用 fullfile
连接文件路径,因为它更可靠
file_root = '/pathtofile/';
sourcefile = 'ABCD*.img';
destinationfile = 'FGHIJ.img';
for s = 1:length(subjects) % loops over subjects
source_pattern=fullfile(file_root subjects{s} , 'stats' , sourcefile);
matching_files=dir(source_pattern);
source_file=fullfile(file_root subjects{s} , 'stats' , matching_files(1).name);
target_file=fullfile(file_root subjects{s} , 'stats' , destinationfile)
copyfile(source_file, target_file);
end