我试图遍历dir中的非隐藏文件并将它们添加到单元格中但由于某种原因它仍然保留了隐藏文件的索引。
png_dir_path
= 25
listing = dir(png_dirpath);
ecell = {};
for i=1:length(listing)
name = listing(i).name
if ~strncmp(name, '.', 1) % No files starting with '.'
disp(listing(i).name)
ecell{i} = fullfile(png_dirpath,listing(i).name);
end
end
当我运行上面的内容时,我得到一个大小为1x28的ecell
,但是disp()只返回隐藏的文件名。为什么在向单元格添加文件名时,它还会添加'.'
,'..'
和'.DS_Store'
?
谢谢!!
png_dirpath
MBP:cartoon_png$ ls
car1.png car12.png car15.png car18.png car20.png car23.png car3.png car6.png car9.png
car10.png car13.png car16.png car19.png car21.png car24.png car4.png car7.png
car11.png car14.png car17.png car2.png car22.png car25.png car5.png car8.png
脚本输出:
>> load_cartoon
name =
.
name =
..
name =
.DS_Store
name =
car1.png
car1.png
name =
car10.png
car10.png
name =
car11.png
car11.png
name =
car12.png
car12.png
name =
car13.png
car13.png
name =
car14.png
car14.png
name =
car15.png
car15.png
name =
car16.png
car16.png
name =
car17.png
car17.png
name =
car18.png
car18.png
name =
car19.png
car19.png
name =
car2.png
car2.png
name =
car20.png
car20.png
name =
car21.png
car21.png
name =
car22.png
car22.png
name =
car23.png
car23.png
name =
car24.png
car24.png
name =
car25.png
car25.png
name =
car3.png
car3.png
name =
car4.png
car4.png
name =
car5.png
car5.png
name =
car6.png
car6.png
name =
car7.png
car7.png
name =
car8.png
car8.png
name =
car9.png
car9.png
正如您在上面的脚本输出中所看到的,name
中的第一行是隐藏文件,第二行没有隐藏文件。
答案 0 :(得分:4)
疯狂物理学家的回答是正确的,为什么你有这个问题。
但是,如果这是您的最终目标,看起来有一种更简单的方法可以在目录中获取PNG列表。
foreach ($ajProducts as $ajProduct ) {
if ( "A" == $ajProduct->name ) {
$jSearchResult[] = $ajProduct->name;
$match_found = true;
}
}
不需要循环或目录检查。
答案 1 :(得分:3)
问题很可能是您正在使用ecell
中的索引将索引移动到ls
。除非您的所有隐藏文件都位于列表的末尾,否则ecell
的长度与ls
的长度相同。您可以使用@LuisMendo的建议删除锁步:
listing = dir(png_dirpath);
ecell = {};
for item = listing'
if item.name(1) == '.'
ecell{end + 1} = fullfile(png_dirpath, item.name);
end
end
部分问题在于,您的结论是隐藏文件仍然存在于ecell
长度为28个元素的事实上。如果您查看了内容,您会发现您的算法几乎是正确的。调试是一项学到的技能。学习如何非常容易(你对打印输出有正确的想法),但要学习哪里非常困难。